请耐心等待,新开发人员,我正在尝试在其 xml 具有 View 寻呼机 tablayout 的 Fragment 类中加载一个 json 文件。我的目标是在一个类中加载所有数据,然后在同一个类中解析后,通过 bundle 或其他方式将这些数据发送到不同的选项卡。我尝试了我的方法,如果有任何其他方法可以做到这一点,那么你可以在这里发布。深表赞赏。
你可以看一下代码。
nd_home_main_VP.java(在这里加载所有的json)
public class nd_home_main_VP extends Fragment {
private TabLayout tabLayout;
private ViewPager viewPager;
private Toolbar toolbar;
private View view=null;
private FrameLayout frameLayout2;
private static final String boom="http://api.androidhive.info/json/movies.json";
private Fragment fragment;
Bundle bundle=new Bundle();
String b;
Bundle bundle2=new Bundle();
String b2;
private FragmentManager fragmentManager=getFragmentManager();
private FragmentTransaction fragmentTransaction;
public nd_home_main_VP() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
view= inflater.inflate(R.layout.nd_menu, container, false);
frameLayout2=(FrameLayout)view.findViewById(R.id.fl_id);
viewPager = (ViewPager)view.findViewById(R.id.viewPager_home_id);
setupViewPager(viewPager);
tabLayout = (TabLayout)view.findViewById(R.id.tabLayout_1_home_id);
if (tabLayout != null) {
tabLayout.setupWithViewPager(viewPager);
}
JsonArrayRequest jsonArrayRequest=new JsonArrayRequest(Request.Method.GET, boom, new Response.Listener<JSONArray>() {
@Override
public void onResponse(JSONArray response_jsonArray) {
Log.d("YES",response_jsonArray.toString());
for(int i=0;i<response_jsonArray.length();i++){
try {
JSONObject jsonObject=response_jsonArray.getJSONObject(i);
b=jsonObject.getString("rating");
bundle.putString("message", b);
Log.d("b",bundle.toString());
b2=jsonObject.getString("releaseYear");
bundle2.putString("message2",b);
Log.d("b2",bundle2.toString());
} catch (JSONException e) {
e.printStackTrace();
}
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
}
});
AppController.getInstance().addToRequestQueue(jsonArrayRequest);
return view;
}
public void doTransaction(){
fragmentTransaction=getFragmentManager().beginTransaction();
fragmentTransaction.replace(R.id.fl_id,fragment);
fragmentTransaction.commit();
}
private void setupViewPager(ViewPager viewPager) {
ViewPagerAdapter adapter = new ViewPagerAdapter(getFragmentManager());
adapter.addFragment(new OneFragment(), "ONE");
adapter.addFragment(new TwoFragment(), "TWO");
viewPager.setAdapter(adapter);
}
class ViewPagerAdapter extends FragmentPagerAdapter {
private final List<Fragment> mFragmentList = new ArrayList<>();
private final List<String> mFragmentTitleList = new ArrayList<>();
public ViewPagerAdapter(FragmentManager manager) {
super(manager);
}
@Override
public Fragment getItem(int position) {
switch (position){
case 1:
fragment=new OneFragment();
fragment.setArguments(bundle);
doTransaction();
return fragment;
case 2:
fragment=new TwoFragment();
fragment.setArguments(bundle2);
doTransaction();
return fragment;
default:
}
return mFragmentList.get(position);
}
@Override
public int getCount() {
return mFragmentList.size();
}
public void addFragment(Fragment fragment, String title) {
mFragmentList.add(fragment);
mFragmentTitleList.add(title);
}
@Override
public CharSequence getPageTitle(int position) {
return mFragmentTitleList.get(position);
}
}
}
在 xml 文件中,我得到了 FrameLayout、TabLayout 和一个 ViewPager
这是这里的错误
java.lang.IllegalStateException:
无法更改 fragment 的容器 IDOneFragment{32fbf30a id=0x7f0d007c android:switcher:2131558526:1}: was 2131558524 now 2131558526
我想知道解决此问题的最佳方法是什么,现在您可以检查错误。
最佳答案
我认为你应该删除
switch (position){
case 1:
fragment=new OneFragment();
fragment.setArguments(bundle);
doTransaction();
return fragment;
case 2:
fragment=new TwoFragment();
fragment.setArguments(bundle2);
doTransaction();
return fragment;
default:
}
您在适配器外部创建了两个 fragment ,因此无需在
getItem
中重新创建它们打回来。确实,无需调用doTransaction
因为 viewPagerAdapter
会处理它。
关于android - 将 Json 加载到一个类并将它们发送到不同的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38549924/