RecyclerView+ViewPager的实现问题

十二月的消亡 2018-06-12 02:31:28
请教一下下面的UI怎么实现:主界面是一个RecyclerView,item里面有个ViewPager,默认item中ViewPager是收缩状态且不可滑动,点击后展开显示完整的ViewPager并且可以滑动,如图



...全文
1978 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
键盘舞者113 2018-06-15
  • 打赏
  • 举报
回复
我自己代码实现

public class MainActivity extends AppCompatActivity {
    private RecyclerView recyclerView;
    private ArrayList<MyEntity> myData;
    public int index = -1;

    MyPagerAdapter mMyPagerAdapter;
    MyAdapter adapter;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        recyclerView = (RecyclerView) findViewById(R.id.recyclerView);

        initData();

        //MyLayoutManager layoutManager = new MyLayoutManager(MyLayoutManager.VERTICAL);
         adapter = new MyAdapter();
        recyclerView.setLayoutManager(new LinearLayoutManager(MainActivity.this));
        recyclerView.setAdapter(adapter);

        List<View> viewList = new ArrayList<View>();

        LayoutInflater layoutInflater = getLayoutInflater();
        View view1 = layoutInflater.inflate(R.layout.page1, null);
        View view2 = layoutInflater.inflate(R.layout.page2, null);
        View view3 = layoutInflater.inflate(R.layout.page3, null);
        viewList.add(view1);
        viewList.add(view2);
        viewList.add(view3);
        mMyPagerAdapter = new MyPagerAdapter(viewList);

    }

    //初始化数据
    private void initData() {
        int size = 30;
        myData = new ArrayList<>(size);
        for (int i = 0; i < size; i++) {
            MyEntity e = new MyEntity();
            e.setStr("str:" + i);
            myData.add(e);
        }
    }

    //自定义Adapter
    class MyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {

        @Override
        public int getItemViewType(int position) {
            if (position == index) {
                return 1001;
            }
            return super.getItemViewType(position);
        }

        @Override
        public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

            if (viewType == 1001) {
                View v = LayoutInflater.from(MainActivity.this).inflate(R.layout.recycler_item_viewpager, parent, false);

                RecyclerView.ViewHolder viewHolder = new TwoViewHolder(v);


                return viewHolder;
            }

            View v = LayoutInflater.from(MainActivity.this).inflate(R.layout.recycler_view_item, parent, false);

            RecyclerView.ViewHolder viewHolder = new MyViewHolder(v);


            return viewHolder;
        }

        @Override
        public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
            if (position == index) {


                return ;
            }
            MyEntity myEntity = myData.get(position);

            MyViewHolder viewHolder = (MyViewHolder) holder;
            viewHolder.setStr(myEntity.getStr());
        }

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

    //自定义Holder
    class MyViewHolder extends RecyclerView.ViewHolder {
        private TextView strTv;


        public MyViewHolder(View itemView) {
            super(itemView);
            strTv = (TextView) itemView.findViewById(R.id.str);
            itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    index = getPosition();
                    adapter.notifyItemChanged(index);

                }
            });
        }

        public void setStr(String str) {
            strTv.setText(str);
        }

    }
    class TwoViewHolder extends RecyclerView.ViewHolder {
        private ViewPager mViewPager;


        public TwoViewHolder(View itemView) {
            super(itemView);
            mViewPager = (ViewPager) itemView.findViewById(R.id.vp);

            mViewPager.setAdapter(mMyPagerAdapter);
        }


    }


    private class MyPagerAdapter extends PagerAdapter {

        private List<View> mViewList;

        MyPagerAdapter(List<View> viewList) {
            mViewList = viewList;
        }

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

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

        @Override
        public boolean isViewFromObject(View view, Object object) {
            return view == mViewList.get((int)Integer.parseInt(object.toString()));
        }

        @Override
        public Object instantiateItem(ViewGroup container, int position) {
            View view = mViewList.get(position);
            container.addView(view);
           return position;
        }

        @Override
        public void destroyItem(ViewGroup container, int position, Object object) {
            container.removeView(mViewList.get(position));
        }

    }
}



activity_main

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.RecyclerView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/recyclerView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >


</android.support.v7.widget.RecyclerView>

VIewPager三个view

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#ff0000">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:text="page1"
        android:textColor="#ffffff"
        android:textSize="20sp" />

</RelativeLayout>

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#ff00ff">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:text="page2"
        android:textColor="#ffffff"
        android:textSize="20sp" />

</RelativeLayout>

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#00ff00">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:text="page3"
        android:textColor="#ffffff"
        android:textSize="20sp" />

</RelativeLayout>
键盘舞者113 2018-06-15
  • 打赏
  • 举报
回复
我应该看懂,你的意思是点击某个ItemView,这个ItemView变成ViewPager,这个ViewPager有三个页面,会自动轮播, 那我试着写个简单的例子,写完给你
十二月的消亡 2018-06-15
  • 打赏
  • 举报
回复
引用 6 楼 qq_34364155 的回复:
[quote=引用 3 楼 lllx9464 的回复:] [quote=引用 2 楼 qq_34364155 的回复:] ViewPager是收缩状态就GONE隐藏掉,点击就显示不行么,可能设置为显示后还要刷新下
你是说收缩状态那部分内容和ViewPager分离吗,但是这样写也不太好写,因为这样ViewPager第一页和后面两页高度就不一样了,而且后面两页还要隐藏原本收缩时显示的内容[/quote] 看不懂你的ViewPager是哪个...[/quote] 每个item右边那部分就是一个ViewPager,ViewPager里第一页是当前天气预览,第二页是当天不同时段天气预报,第三天是未来七天天气预报
寒冰大神 2018-06-14
  • 打赏
  • 举报
回复
引用 3 楼 lllx9464 的回复:
[quote=引用 2 楼 qq_34364155 的回复:] ViewPager是收缩状态就GONE隐藏掉,点击就显示不行么,可能设置为显示后还要刷新下
你是说收缩状态那部分内容和ViewPager分离吗,但是这样写也不太好写,因为这样ViewPager第一页和后面两页高度就不一样了,而且后面两页还要隐藏原本收缩时显示的内容[/quote] 看不懂你的ViewPager是哪个...
十二月的消亡 2018-06-14
  • 打赏
  • 举报
回复
引用 4 楼 liangjiujiu 的回复:
你这个需求描述就不清楚,你右边viewpage切换左边图片也不切换那么你左右确定是同一个recycleview?你确定好需求在设计方案
上面四张图对应ViewPager的四种状态,你看不懂我也没办法
dark_liang 2018-06-13
  • 打赏
  • 举报
回复
你这个需求描述就不清楚,你右边viewpage切换左边图片也不切换那么你左右确定是同一个recycleview?你确定好需求在设计方案
十二月的消亡 2018-06-12
  • 打赏
  • 举报
回复
引用 2 楼 qq_34364155 的回复:
ViewPager是收缩状态就GONE隐藏掉,点击就显示不行么,可能设置为显示后还要刷新下
你是说收缩状态那部分内容和ViewPager分离吗,但是这样写也不太好写,因为这样ViewPager第一页和后面两页高度就不一样了,而且后面两页还要隐藏原本收缩时显示的内容
寒冰大神 2018-06-12
  • 打赏
  • 举报
回复
ViewPager是收缩状态就GONE隐藏掉,点击就显示不行么,可能设置为显示后还要刷新下
十二月的消亡 2018-06-12
  • 打赏
  • 举报
回复
如果其他的实现方式也可以

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧