RecyclerView . item多条目加载

来源:互联网 发布:骑士队数据 编辑:程序博客网 时间:2024/06/06 06:44



////////////////////////////////main.xml///////////////////

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.baway.recylerviewdemo.MainActivity">

    <Button
        android:id="@+id/bt"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="网格" />

    <android.support.v4.widget.SwipeRefreshLayout
        android:id="@+id/srl"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <android.support.v7.widget.RecyclerView
            android:id="@+id/rv"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
    </android.support.v4.widget.SwipeRefreshLayout>



/////////////////////////////////////////MainAcitivity////////////////////////////////////////////

public class MainActivity extends BaseActivity implements View.OnClickListener {
    private List<ItemBean> list = new ArrayList<>();
    private Button mBt;
    private RecyclerView rv;
    private SwipeRefreshLayout mSrl;
    private MyAdapter adapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
    }

    private void initView() {
        mBt = (Button) findViewById(R.id.bt);
        mBt.setOnClickListener(this);
        mSrl = (SwipeRefreshLayout) findViewById(srl);
        mSrl.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
            @Override
            public void onRefresh() {
                Toast.makeText(MainActivity.this, "onRefresh开始", Toast.LENGTH_SHORT).show();
                //网络请求数据,然后更新列表
                new Handler().postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        Toast.makeText(MainActivity.this, "数据请求完成,并且更新了列表", Toast.LENGTH_SHORT).show();
                        List<ItemBean> l = new ArrayList<ItemBean>();
                        for (int i = 0; i < 10; i++) {
                            ItemBean itemBean = new ItemBean("名字" + i, "年龄" + i);
                            l.add(itemBean);
                        }
                        adapter.refresh(l);
                        mSrl.setRefreshing(false);
                    }
                }, 3000);
            }
        });
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.bt:
               /* String str = mBt.getText().toString().trim();
                if ("网格".equals(str)) {
                    show(false);
                    mBt.setText("垂直");
                } else {
                    show(true);
                    mBt.setText("网格");
                }*/
                //给该列表,填加一个新的条目
                adapter.addItem(new ItemBean("新的", "心底"));
                break;
        }
    }

    private void refresh() {

    }

    /**
     * 展示页面数据
     *
     * @param flag
     */
    private void show(boolean flag) {
        //设置布局管理器
        rv.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false));
//        rv.setLayoutManager(new GridLayoutManager(this, 2));
        //添加分割线
        RecyclerView.LayoutManager layoutManager = null;
        if (flag) {
            layoutManager = new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false);
        } else {
            layoutManager = new GridLayoutManager(this, 2);
        }
//        rv.setLayoutManager(new StaggeredGridLayoutManager(3,StaggeredGridLayoutManager.VERTICAL));
        rv.setLayoutManager(layoutManager);
        //设置分割线
        rv.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL));
        //设置动画
        rv.setItemAnimator(new DefaultItemAnimator());
        //设置适配器
        for (int i = 0; i < 100; i++) {
            ItemBean itemBean = new ItemBean("name" + i, "age" + i);
            list.add(itemBean);
        }
        adapter = new MyAdapter(this, list);
        rv.setAdapter(adapter);

        adapter.setOnItemListener(new MyAdapter.OnItemListener() {
            @Override
            public void onItemClick(ItemBean itemBean, int position) {
                Toast.makeText(MainActivity.this, "点击:" + position + " " + itemBean.toString(), Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onItemLongClick(ItemBean itemBean, int position) {
                Toast.makeText(MainActivity.this, "长按:" + position + " " + itemBean.toString(), Toast.LENGTH_SHORT).show();
            }
        });
    }
}




///////////////////////适配器/////////////////////

public class MyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
    private Context context;
    private List<ItemBean> list;
    private OnItemListener onItemListener;
    private static int TYPE1 = 0;
    private static int TYPE2 = 1;

    public interface OnItemListener {
        public void onItemClick(ItemBean itemBean, int position);

        public void onItemLongClick(ItemBean itemBean, int position);
    }

    public void setOnItemListener(OnItemListener onItemListener) {
        this.onItemListener = onItemListener;
    }

    public MyAdapter(Context context, List<ItemBean> list) {
        this.context = context;
        this.list = list;
    }

    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        //加载写好的item布局
        RecyclerView.ViewHolder viewHolder = null;
        if (viewType == TYPE1) {
            View view1 = LayoutInflater.from(context).inflate(R.layout.item1, parent, false);
            viewHolder = new Type1Viewholder(view1);
        } else {
            View view2 = LayoutInflater.from(context).inflate(R.layout.item2, parent, false);
            viewHolder = new Type2Viewholder(view2);
        }


        return viewHolder;
    }

    @Override
    public int getItemViewType(int position) {
        return position % 2 == 0 ? TYPE1 : TYPE2;
    }

    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) {
        //给item布局里的组件设置值
        if (holder instanceof Type1Viewholder) {
            final ItemBean itemBean = list.get(position);
            Type1Viewholder type1Viewholder = (Type1Viewholder) holder;
            type1Viewholder.tvName.setText(itemBean.getName());
            type1Viewholder.tvAge.setText(itemBean.getAge());

            type1Viewholder.ll.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    if (onItemListener != null) {
                        onItemListener.onItemClick(itemBean, position);
                    }
                }
            });
            type1Viewholder.ll.setOnLongClickListener(new View.OnLongClickListener() {
                @Override
                public boolean onLongClick(View view) {
                    if (onItemListener != null) {
                        onItemListener.onItemLongClick(itemBean, position);
                    }
                    return true;
                }
            });
        } else {
            Type2Viewholder type2Viewholder = (Type2Viewholder) holder;
        }
    }

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

    private class Type1Viewholder extends RecyclerView.ViewHolder {
        //类似listview的adapter的viewholder
        private TextView tvName;
        private TextView tvAge;
        private LinearLayout ll;

        public Type1Viewholder(View itemView) {
            super(itemView);
            tvName = itemView.findViewById(R.id.tv_name);
            tvAge = itemView.findViewById(R.id.tv_age);
            ll = itemView.findViewById(R.id.ll);
        }
    }

    private class Type2Viewholder extends RecyclerView.ViewHolder {

        public Type2Viewholder(View itemView) {
            super(itemView);
        }
    }


    public void refresh(List<ItemBean> l) {
        list.clear();
        list.addAll(l);
        notifyDataSetChanged();
    }

    public void addItem(ItemBean itemBean) {
        list.add(0, itemBean);
        notifyItemInserted(0);
    }
}


原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 2个月宝宝老是生病怎么办 2个月的哈士奇生病怎么办 怀孕的猫生病了怎么办 宝宝生病咳嗽啥都不吃怎么办 怀孕了感冒了怎么办啊 2个月宝宝生病了怎么办 刚刚怀孕了就生病了怎么办 一岁多宝宝总是发烧咳嗽生病怎么办 7个月宝宝生病怎么办 4个月宝宝老是生病怎么办 孕早期嗓子有痰怎么办 鼻炎早晨起床鼻涕带血怎么办 鼻子破皮了结痂怎么办 擤鼻子耳朵好像堵住了怎么办 鼻子和脸上起皮怎么办 鼻子擦鼻涕擦红怎么办 鼻子下面擦红了怎么办 鼻子擤鼻涕破皮怎么办 哭完鼻子不通气怎么办 擦鼻子擦多了疼怎么办 擤鼻涕时耳朵听不见了怎么办 吸鼻涕耳朵感觉被塞怎么办 擤鼻涕多了头疼怎么办 鼻子擤出鼻息肉怎么办 擤鼻涕鼻子破了怎么办 下水道里有鼻涕虫的怎么办 家里井口处有很多鼻涕虫怎么办 花生地里有蜗牛怎么办 菜园里有好多虫怎么办 心里莫名的急该怎么办 老感觉心烦气燥怎么办 什么事都不想做怎么办心里烦躁 咳嗽流鼻涕身体发热怕冷怎么办 不感冒流清鼻涕怎么办 刚怀孕感冒了怎么办鼻塞流鼻涕 孕妇打喷嚏流鼻涕怎么办速效办法 宝宝流鼻涕一个月了怎么办 一个月婴儿感冒咳嗽流鼻涕怎么办 怎么办感冒能好得快些 一个月的宝宝流鼻涕怎么办 鼻炎犯了一直流鼻涕怎么办