開発には初めてですが、xmlのビューページャーtablayoutを持つFragmentクラスでjsonファイルをロードしようとしています。私の目標は、すべてのデータを1つのクラスにロードしてから、同じクラスでパースした後、バンドルなどで別のタブにデータを送信したい場合です。私は私のアプローチで試してみました。これを行う他の方法があれば、ここに投稿することができます。深く感謝します。 コードを調べることができます。 XMLファイルにJsonを1つのクラスにロードして別のクラスに送信
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);
}
}
}
、私はでframeLayout、TabLayoutとViewPager
これはここ
java.lang.IllegalStateException:
エラーですが、コンテナのIDを変更することはできませんですフラグメント OneFragment{32fbf30a id=0x7f0d007c android:switcher:2131558526:1}: was 2131558524 now 2131558526
私はこれに近づくための最良の方法を知りたいと思います彼は誤りです。
これを削除すると、viewpagerがスワイプされたときに他のタブにどのようにデータを送信するのですか? – notTdar
フラグメントインスタンスの作成時にデータを渡す必要があります:http://www.androiddesignpatterns.com/ 2012年5月1日--with-newinstance-to-instantiate.html – Lino
jsonが1つのクラスにロードされたら、上記のように他のレイアウト(タブ)に送信し、viwpagerをスワイプする必要がありますか? – notTdar