Android fragments 如何在包中传递改装数据以查看活动中的寻呼机片段?

Android fragments 如何在包中传递改装数据以查看活动中的寻呼机片段?,android-fragments,android-recyclerview,android-viewpager,retrofit2,bundle,Android Fragments,Android Recyclerview,Android Viewpager,Retrofit2,Bundle,在我的活动中,我从以前的活动中收到一个游戏id,并使用这个id从api中获取数据列表。在活动中使用ApiCheats方法来获取数据列表 我想把这个列表传递给我的视图页面中的片段,对于这个我使用了bundle,但是在片段中bundle是空的 我应该如何将bundle列表传递给fragment,这是我通过改造收到的数据 这就是活动 public class GameListCheatsActivity extends AppCompatActivity { private final S

在我的活动中,我从以前的活动中收到一个游戏id,并使用这个id从api中获取数据列表。在活动中使用ApiCheats方法来获取数据列表

我想把这个列表传递给我的视图页面中的片段,对于这个我使用了bundle,但是在片段中bundle是空的

我应该如何将bundle列表传递给fragment,这是我通过改造收到的数据

这就是活动

 public class GameListCheatsActivity extends AppCompatActivity {

    private final String TAG = GameListCheatsActivity.class.getSimpleName();
    public List<Cheats> Cheats;
    ArrayList cheats = new ArrayList<Cheats>();
 //   public RecyclerView recyclerView;
    String Gameid;
    ViewPager viewPager;
    ViewPagerAdapter adapter;
    TabLayout tabLayout ;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_game_list_cheats);
//        recyclerView = (RecyclerView) findViewById(R.id.recycler_id);
//        LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
//        recyclerView.setLayoutManager(linearLayoutManager);
//        recyclerView.setHasFixedSize(true);


        Gameid = getIntent().getStringExtra("GameID");
        tabLayout = (TabLayout) findViewById(R.id.tab_layout_id);
        viewPager = (ViewPager) findViewById(R.id.viewpager_id);
        adapter = new ViewPagerAdapter( getSupportFragmentManager());
        ApiCheats();
        adapter.AddFragment(new Fragment_Cheats(),"GameCheats");
        adapter.AddFragment(new Fragment_Favourites(),"Favourites");
        viewPager.setAdapter(adapter);
        tabLayout.setupWithViewPager(viewPager);




        viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

            }

            @Override
            public void onPageSelected(int position) {

            }

            @Override
            public void onPageScrollStateChanged(int state) {
                if(state == 0){
                    View inflatedView = getLayoutInflater().inflate(R.layout.cheatitem, null);




                }
                if(state == 1){
                    View inflatedView = getLayoutInflater().inflate(R.layout.cheatitem, null);

                }

            }
        });




    }

    public void ApiCheats()
    {
        ApiUtil.getServiceClass().getAllCheats(Gameid).enqueue(new Callback<List<Cheats>>() {
            @Override
            public void onResponse(Call<List<Cheats>> call, Response<List<Cheats>> response) {
                if(response != null)
                {
                    if(response.isSuccessful())
                    {
                      Cheats =  response.body();

                        Bundle bundle = new Bundle();
                        bundle.putParcelableArrayList("cheatslist", (ArrayList<? extends Parcelable>) Cheats);
                        Fragment_Cheats fragment_cheats = new Fragment_Cheats();
                        fragment_cheats.setArguments(bundle);



                    }

                }
                Log.d(TAG, "Returned count " + Cheats.size());

                GameListCheatsActivity.this.runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                      //  CheatsAdapter adapter = new CheatsAdapter(getApplicationContext(), Cheats);
                      //  recyclerView.setAdapter(adapter);


                    }
                });

            }

            @Override
            public void onFailure(Call<List<Cheats>> call, Throwable t) {
                Log.d(TAG, "error loading from API");
            }
        });

    }



}
这是fragments类中的一个

public class Fragment_Cheats extends Fragment   {


    View v;
    private RecyclerView mrecyclerview;
    private List<Cheats> lstGameCheats;


    public Fragment_Cheats()
    {

    }


//    @Override
//    public void onCreate(@Nullable Bundle savedInstanceState) {
//        super.onCreate(savedInstanceState);
//
//        Bundle bundle = this.getArguments();
//        if (bundle != null) {
//            lstGameCheats = bundle.getParcelable("cheatslist");
//        }
//
//    }




    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        v = inflater.inflate(R.layout.fragment_fragment__cheats, container, false);
        mrecyclerview = (RecyclerView)v.findViewById(R.id.recyclerview_cheats);

        Bundle bundle = this.getArguments();
        if (bundle != null) {
            lstGameCheats = bundle.getParcelable("cheatslist");
        }
        CheatsAdapter recyclerAdapter = new CheatsAdapter(getContext(),lstGameCheats);
        mrecyclerview.setLayoutManager(new LinearLayoutManager(getActivity()));
        mrecyclerview.setAdapter(recyclerAdapter);
        return  v;

    }

}
这是查看寻呼机适配器

    public class ViewPagerAdapter extends FragmentPagerAdapter {

    private final List<Fragment> lstFragment = new ArrayList<>();
    private final List<String> lstTitles = new ArrayList<>();


    public ViewPagerAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int position) {
        return lstFragment.get(position);
        //return null;
    }

    @Override
    public int getCount() {
        return lstTitles.size();
        //return 0;
    }

    @Nullable
    @Override
    public CharSequence getPageTitle(int position) {
        return lstTitles.get(position);
    }


    public  void AddFragment(Fragment fragment,String title){

        lstFragment.add(fragment);
        lstTitles.add(title);
    }


}
您应该将欺骗设置为添加到ViewPageRadator的片段,但根据代码,您只需将数据设置为新片段实例

根据Fragment_欺骗代码,如果要在onCreate方法中调用getArgument,则应在片段添加到ViewPagerAdapter之前调用Fragment.setArgument

但在您的情况下,这是不可能的,因为数据来自网络

所以,两步

将数据设置为正确的Fragment\u Cheats实例 Notify Fragment_欺骗更改的数据,刷新片段中的视图状态 替换您的onResponse


很抱歉,不了解如何将数据传递到fragment,我尝试发送捆绑包,但没有在那里获取任何数据。如何将欺骗设置为fragment您可以使用手动方式将欺骗设置为fragment。您的代码无法工作,因为您将数据设置为错误的片段,并在错误的时间调用getArgument。我已经更新了我的答案。
@Override
public void onResponse(Call<List<Cheats>> call, Response<List<Cheats>> response) {
    if(response != null)
    {
        if(response.isSuccessful())
        {
            Cheats =  response.body();

            Fragment_Cheats fragment_cheats = adapter.getCheatFragment()
            fragment_cheats.setDatas(Cheats);
        }

    }
    Log.d(TAG, "Returned count " + Cheats.size());

    GameListCheatsActivity.this.runOnUiThread(new Runnable() {
        @Override
        public void run() {
          //  CheatsAdapter adapter = new CheatsAdapter(getApplicationContext(), Cheats);
          //  recyclerView.setAdapter(adapter);


        }
    });

}

 public void setDatas(List<Cheats> datas) {
       this.lstGameCheats = datas;
       // and set the datas to the RecylerView adapter
       recyclerviewAdapter.notifyDataSetChanged();
    }