FragmentStatePagerAdapter在当前页面和缓存页面

时间:2016-05-21 09:38:52

标签: android android-fragments android-viewpager android-tablayout fragmentstatepageradapter

我正在使用FragmentStatePagerAdapter使用带有标签布局的viewpager加载片段。我正在传递不同的id以在getItem()中加载具有不同数据的相同片段,但是它总是在第一次返回具有相同数据的片段时,当我滑过下一个屏幕并返回到第一个屏幕时,它将显示正确的数据。 任何解决方案或信息都非常有用。

我在我的onCreate()中调用了这样的适配器,它总是为位置0和1返回相同的数据。

    MyPagerAdapter adapter = new MyPagerAdapter (getSupportFragmentManager(),bundle); 
    viewPager.setAdapter(adapter);
    tabLayout.setupWithViewPager(viewPager);

我的适配器

    static class MyPagerAdapter extends FragmentStatePagerAdapter {

    private  Bundle b;

    public MyPagerAdapter (FragmentManager fm,Bundle b) {
        super(fm);
        this.b=b;
    }

    @Override
    public Fragment getItem(int position) {

        ContentListFragment fragment = new ContentListFragment();

        b.putString("id", tabList.get(position).get("id"));
        fragment.setArguments(b);
        return fragment;
    }

    @Override
    public int getCount() {
        return  tabList.size();
    }

    @Override
    public CharSequence getPageTitle(int position) {
        return tabList.get(position).get("title");
    }

}

修改

ContentListFragment.java

public class ContentListFragment extends Fragment{

private static final String TAG="ContentListFragment";  
private String id,type;
private TextView norecord;
private View rootView;

private List<AppReading> appReadingList;
private RecyclerView recyclerView;
private ContentRecyclerAdapter adapter;


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    Log.d(TAG, "onCreateView");
    rootView = inflater.inflate(R.layout.content_list, container,false);

    initView();
    initData();

    return rootView;
}


private void initView() {
    // TODO Auto-generated method stub
    norecord=(TextView)rootView.findViewById(R.id.norecord);
    recyclerView=(RecyclerView) rootView.findViewById(R.id.recycler_view);
    recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
}

private void initData() {       
    id=getArguments().getString("id");      
    getContentList(category);
}


// Get records by category
private void getContentList(String id){
    Log.d(TAG, "getContentList: "+id);
    Dao dao=new Dao(getActivity());
    dao.open();
    appReadingList=dao.getContentList(id);
    dao.close();

    //Set adapter if data available
    if(appReadingList.size()>0){
        adapter=new ContentRecyclerAdapter();

        recyclerView.addItemDecoration(new DividerItemDecoration(getActivity(),R.drawable.divider));
        recyclerView.setItemAnimator(new FadeInLeftAnimator());
        recyclerView.setAdapter(new SlideInLeftAnimationAdapter(adapter));
    }else{
        norecord.setVisibility(View.VISIBLE);
        recyclerView.setVisibility(View.GONE);
    }
}


private class ContentRecyclerAdapter extends RecyclerView.Adapter<ContentRecyclerAdapter.ViewHolder>{

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.listitem, parent, false);
        ViewHolder holder = new ViewHolder(v);
        return  holder;
    }

    @Override
    public void onBindViewHolder(ViewHolder holder,final int position) {

        holder.itemContent.setText(appReadingList.get(position).getTitle());
        holder.itemDate.setText(appReadingList.get(position).getAddDate());

    }

    @Override
    public int getItemCount() {
        return appReadingList.size();
    }

    @Override
    public void onAttachedToRecyclerView(RecyclerView recyclerView) {
        super.onAttachedToRecyclerView(recyclerView);
    }


    class ViewHolder extends  RecyclerView.ViewHolder{
        TextView itemContent, itemDate ;
        RelativeLayout listItem;

        ViewHolder(View itemView){
            super(itemView);
            itemContent = (TextView) itemView.findViewById(R.id.itemcontent);
            itemDate = (TextView) itemView.findViewById(R.id.itemdate);
            listItem=(RelativeLayout) itemView.findViewById(R.id.rlListItem);
        }
    }
}   

0 个答案:

没有答案