【问题标题】:android only show first viewpager inside recyclerviewandroid只在recyclerview中显示第一个viewpager
【发布时间】:2017-06-07 13:59:48
【问题描述】:

我在 recyclerview 中有一个带有 FragmentStatePagerAdapter 的 viewpager 并且它只显示 recyclerview 中的第一行 请帮帮我

viewpager 适配器: 公共类 CustomPagerAdapter 扩展 FragmentStatePagerAdapter { 私有静态 int NUM_ITEMS = 3;

    public CustomPagerAdapter(FragmentManager fragmentManager) {
        super(fragmentManager);
        Log.e("fragmentManager",fragmentManager.toString());
    }

    // Returns total number of pages
    @Override
    public int getCount() {
        return NUM_ITEMS;
    }

    // Returns the fragment to display for that page
    @Override
    public Fragment getItem(int position) {
        Fragment currentFragment;
        switch (position) {
            case 0:
                currentFragment=new FirstFragment();
                break;
            case 1:
                currentFragment=new SecondFragment();
                break;
            case 2:
                currentFragment=new ThirdFragment();
                break;
            default:
                currentFragment=new FirstFragment();
                break;
        }

        return currentFragment;
    }

    @Override
    public int getItemPosition(Object object) {
        return POSITION_NONE;
    }
}

recyclerview 适配器:

public class JobAdapter extends RecyclerView.Adapter<JobAdapter.JobHolder> {
    private Context context;
    private List<String> mJobList = new ArrayList<>();

    public JobAdapter(List<String> mJobList,Context context) {
        this.mJobList = mJobList;
        this.context=context;
    }

    @Override
    public JobHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        LayoutInflater layoutInflater = LayoutInflater.from(context);
        View view = layoutInflater.inflate(R.layout.find_job_line_content, parent, false);
        return new JobHolder(view);
    }

    @Override
    public void onBindViewHolder(final JobHolder holder, int position) {
        configurePagerHolder(holder, position);
    }

    private void configurePagerHolder(JobHolder holder, int position) {
        //Job job= mJobList.get(position);
        CustomPagerAdapter adapter = new CustomPagerAdapter(((MainActivity)context).getSupportFragmentManager());
        holder.viewPager.setAdapter(adapter);
        adapter.notifyDataSetChanged();
        holder.viewPager.setCurrentItem(1);
        Log.e("configurePagerHolder",position+"");

    }

    public int getItemCount() {``
        return mJobList.size();
    }


    public class JobHolder extends RecyclerView.ViewHolder{
        ViewPager viewPager;
        public JobHolder(View itemView) {
            super(itemView);
            viewPager=(ViewPager)itemView.findViewById(R.id.slidesPager);
        }

    }

主要:

public class MainActivity extends AppCompatActivity {
    RecyclerView mRecyclerView;
    JobAdapter adapter;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mRecyclerView = (RecyclerView)findViewById(R.id.find_jobs_recyclerview);
        mRecyclerView.setLayoutManager(new LinearLayoutManager(this,
                LinearLayoutManager.VERTICAL,false));
        mRecyclerView.setHasFixedSize(true);
        List<String> list=new ArrayList<>();
        list.add("1");
        list.add("2");
        list.add("3");
        adapter = new JobAdapter(list,this);
        mRecyclerView.setAdapter(adapter);

    }
}

【问题讨论】:

  • 您找到解决方法了吗?
  • 是的,我以程序方式创建了 viewpager id,它可以工作
  • 请解释一下您在哪里以编程方式设置了viewpager id?你是怎么解决这个问题的?谢谢

标签: android-recyclerview fragmentpageradapter viewpage


【解决方案1】:

答案很晚,但它可能对某些人有所帮助......

尝试使用 ViewPager2(ViewPager 的改进版本):https://developer.android.com/training/animation/screen-slide-2

就我而言,它解决了问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多