簡體   English   中英

將數據從活動傳遞到選項卡片段

[英]passing data from activity to tabs fragment

無法將檢索到的數據列表從改造中傳遞到片段中的recyclerview中! 嘗試了一些解決方案,但不起作用!

我嘗試過創建片段和傳遞中的方法,但是不起作用! 越來越空!

活動

    TabLayout tabLayout;
    ViewPager viewPager;
    RecyclerView recyclerView;
    //vars
    private Dto dto;
    List<Post_DTO> post_dto_list=new ArrayList<>();
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        dto=new Dto();
        UpdateList();
        super.onCreate(savedInstanceState);
        setContentView(R.layout.home_layout);
        tabLayout=(TabLayout)findViewById(R.id.tabLayout);
        viewPager=(ViewPager)findViewById(R.id.viewPager);
        tabLayout.addTab(tabLayout.newTab().setText("Dashboard"));
        tabLayout.addTab(tabLayout.newTab().setText("Converations"));
        tabLayout.addTab(tabLayout.newTab().setText("Profile"));
        PostFragment pf=new PostFragment();
        pf.passData(getApplicationContext(),post_dto_list);
        FragmentManager fm = getSupportFragmentManager();
        FragmentTransaction ft = fm.beginTransaction();
        //ft.add(R.id.posts_recyclerview, ft);
        ft.addToBackStack(null);
        ft.commit();
        tabLayout.setTabGravity(TabLayout.GRAVITY_FILL);
        final MyAdapter adapter = new MyAdapter(this,getSupportFragmentManager(), tabLayout.getTabCount());
        viewPager.setAdapter(adapter);

        viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));

        tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
            @Override
            public void onTabSelected(TabLayout.Tab tab) {
                System.out.println(tab.getPosition());
                viewPager.setCurrentItem(tab.getPosition());
            }
            @Override
            public void onTabUnselected(TabLayout.Tab tab) {
            }
            @Override
            public void onTabReselected(TabLayout.Tab tab) {
            }
        });
    }
    private void UpdateList() {
        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(getString(R.string.postUrl))
                .addConverterFactory(GsonConverterFactory.create())
                .build();

        PostsInterface postsInterface =retrofit.create(PostsInterface.class);
        Call<Post_DTO_Resp> call= postsInterface.getPosts();
        call.enqueue(new Callback<Post_DTO_Resp>() {
            @Override
            public void onResponse(Call<Post_DTO_Resp> call, Response<Post_DTO_Resp> response) {
                //pDialog.dismiss();
                if(!response.isSuccessful())
                {
                    Toast.makeText(getApplicationContext(),"Loading the posts!",Toast.LENGTH_SHORT).show();
                }

                Post_DTO_Resp posts = response.body();
                post_dto_list=posts.getPost_dto_list();
                //dto.setList(post_dto_list);
            }

            @Override
            public void onFailure(Call<Post_DTO_Resp> call, Throwable t) {
                //pDialog.dismiss();
                if(t.getMessage().equals("End of input at line 1 column 1 path $"))
                {
                    Toast.makeText(getApplicationContext(), "There are no posts!", Toast.LENGTH_LONG).show();
                }
                else
                {
                    Toast.makeText(getApplicationContext(), "Api Error!", Toast.LENGTH_LONG).show();
                }

            }
        });
    }
}

分段!

public class PostFragment extends Fragment {
    RecyclerView recyclerView;
    View v;
    Dto dtobject;
    private static final String DESCRIBABLE_KEY = "list";
    private Describable mDescribable;
    List<Post_DTO> post_dto_list;
    public PostFragment() {
        // Required empty public constructor
    }
    public void passData(Context context, List<Post_DTO> list) {
        //mContext = context;
        post_dto_list = list;
        // mIndex = pos;
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
        v=inflater.inflate(R.layout.fragment_posts, container, false);
        recyclerView=(RecyclerView) v.findViewById(R.id.posts_recyclerview);
        RecyclerViewAdapter recyclerViewAdapter=new RecyclerViewAdapter(getContext(),post_dto_list);
        recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
        recyclerView.setAdapter(recyclerViewAdapter);
        //listupdater();
        return v;
    }

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }
}

只想從Activity獲取post_dto_list到fragment類! 建議!

您可以使用bundle將列表從活動傳遞到片段。

活動中:

Bundle bundle = new Bundle();
bundle.putSerializable("list", mList);

mFragment.setArguments(bundle);

然后在您的片段中:

mList = getIntent().getExtras().getSerializable("list"));

POJO ,你的列表中包含應parcelableParcelable優於Serializable )。

您的POJO應該類似於:

public class MyPOJO implements Parcelable {

有關更多信息,請參考this

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM