RecycleView的基本配置和使用方法(四)---RecycleView实现简单demo

来源:互联网 发布:传奇清除所有玩家数据 编辑:程序博客网 时间:2024/05/16 17:13

recycleView实现的简单效果的代码

这是activity_main 的XML文件

 <?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><LinearLayout    android:layout_width="match_parent"    android:layout_height="wrap_content"    android:orientation="horizontal">    <Button        android:id="@+id/addItem"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:layout_weight="1"        android:text="增加Item" />    <Button        android:id="@+id/removeItem"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:layout_weight="1"        android:text="删除Item" /></LinearLayout><LinearLayout    android:layout_width="match_parent"    android:layout_height="wrap_content"    android:orientation="horizontal">    <Button        android:id="@+id/change_listView"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:layout_weight="1"        android:text="切换ListView" />    <Button        android:id="@+id/change_gridView"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:layout_weight="1"        android:text="切换GridView" />    <Button        android:id="@+id/change_waterfall"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:layout_weight="1"        android:text="切换瀑布流" /></LinearLayout><android.support.v7.widget.RecyclerView    android:id="@+id/recyclerView_demo"    android:layout_width="match_parent"    android:layout_height="match_parent"></android.support.v7.widget.RecyclerView></LinearLayout>

这是item的XML文件

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="wrap_content"android:background="#44ff0000"android:orientation="vertical"><TextView    android:id="@+id/id_num"    android:layout_width="match_parent"    android:layout_height="wrap_content"    android:gravity="center"    android:text="1" /></LinearLayout>

这是RecyclerView的适配器

import android.content.Context;import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.TextView;import com.example.recycleview.Interfaces.ItemClickListener;import com.example.recycleview.R; import java.util.ArrayList; import java.util.List;/** * Created zhangyunhao on 2016/12/12. * 设置RecyclerView的适配器  */ public class HomeAdapter extends RecyclerView.Adapter<HomeAdapter.MyViewHolder> {private List<String> list;private Context context;private List<Integer> height;private ItemClickListener itemClickListener;public HomeAdapter(Context context, List<String> list) {    this.context = context;    this.list = list;    getRandomHeight(this.list);}public void setItemClickListener(ItemClickListener itemClickListener) {    this.itemClickListener = itemClickListener;}/** * 得到随机的Item的高度 */private void getRandomHeight(List<String> list) {    height = new ArrayList<>();    for (int i = 0; i < list.size(); ++i) {        height.add((int) (200 + Math.random() * 400));    }}@Overridepublic MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {    MyViewHolder holder = new MyViewHolder(LayoutInflater.from(context).inflate(R.layout.recyclerview_item, parent, false));    return holder;}@Overridepublic void onBindViewHolder(final MyViewHolder holder, final int position) {    /**     * 得到item的LayoutParams布局参数     */    ViewGroup.LayoutParams params = holder.itemView.getLayoutParams();    params.height = height.get(position);//把随机的高度赋予item布局    holder.itemView.setLayoutParams(params);//把params设置item布局    holder.textView.setText(list.get(position));//为控件绑定数据    //为TextView添加监听回调    holder.textView.setOnClickListener(new View.OnClickListener() {        @Override        public void onClick(View v) {            if (itemClickListener != null) {                itemClickListener.onItemSubViewClick(holder.textView, position);            }        }    });}@Overridepublic int getItemCount() {    return list.size();}class MyViewHolder extends RecyclerView.ViewHolder {    TextView textView;    public MyViewHolder(final View itemView) {        super(itemView);        textView = (TextView) itemView.findViewById(R.id.id_num);        //为item添加普通点击回调        itemView.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                if (itemClickListener != null) {                    itemClickListener.onItemClick(itemView, getPosition());                }            }        });        //为item添加长按回调        itemView.setOnLongClickListener(new View.OnLongClickListener() {            @Override            public boolean onLongClick(View v) {                if (itemClickListener != null) {                    itemClickListener.onItemLongClick(itemView, getPosition());                }                return true;            }        });    }}public void addItem(int position) {    list.add(position,"A");    notifyItemInserted(position);}public void removeItem(int position) {    list.remove(position);    notifyItemRemoved(position);} }

这是MainActivity

import android.support.v7.app.AppCompatActivity;import android.support.v7.widget.DefaultItemAnimator;import android.support.v7.widget.GridLayoutManager; import android.support.v7.widget.LinearLayoutManager;import android.support.v7.widget.RecyclerView;import android.os.Bundle;import android.support.v7.widget.StaggeredGridLayoutManager; import android.view.View; import android.widget.Button;import android.widget.Toast;import com.example.recycleview.Adapters.HomeAdapter; import com.example.recycleview.Interfaces.ItemClickListener;import com.example.recycleview.R;import java.util.ArrayList; import java.util.List;public class MainActivity extends AppCompatActivity implements View.OnClickListener {private RecyclerView recyclerView;private List<String> list;private HomeAdapter homeAdapter;private Button addItem;private Button removeItem;private Button change_listView;private Button change_gridView;private Button change_waterfall;private boolean isFirstView = true;@Overrideprotected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_main);    findViewById();    initData();    recyclerView = (RecyclerView) findViewById(R.id.recyclerView_demo);    recyclerView.setItemAnimator(new DefaultItemAnimator());    homeAdapter = new HomeAdapter(this, list);    recyclerView.setAdapter(homeAdapter);    homeAdapter.setItemClickListener(new ItemClickListener() {        @Override        public void onItemClick(View view, int position) {            Toast.makeText(MainActivity.this, "点击了Item" + position, Toast.LENGTH_SHORT).show();        }        @Override        public void onItemLongClick(View view, int position) {            Toast.makeText(MainActivity.this, "长按了Item" + position, Toast.LENGTH_SHORT).show();        }        @Override        public void onItemSubViewClick(View view, int position) {        }    });}public void findViewById() {    addItem = (Button) findViewById(R.id.addItem);    removeItem = (Button) findViewById(R.id.removeItem);    change_listView = (Button) findViewById(R.id.change_listView);    change_gridView = (Button) findViewById(R.id.change_gridView);    change_waterfall = (Button) findViewById(R.id.change_waterfall);    addItem.setOnClickListener(this);    removeItem.setOnClickListener(this);    change_listView.setOnClickListener(this);    change_gridView.setOnClickListener(this);    change_waterfall.setOnClickListener(this);}private void initData() {    list = new ArrayList<>();    for (int i = 'A'; i <= 'Z'; ++i) {        list.add("" + (char) i);    }}@Overridepublic void onClick(View v) {    switch (v.getId()) {        case R.id.addItem:            homeAdapter.addItem(1);            break;        case R.id.removeItem:            homeAdapter.removeItem(1);            break;        case R.id.change_listView:            /**             * ListView的效果             */            recyclerView.setLayoutManager(new LinearLayoutManager(this));            if (isFirstView) {                isFirstView = false;                onClick(findViewById(R.id.recyclerView_demo));            }            break;        case R.id.change_gridView:            /**             * GridView的效果             */            recyclerView.setLayoutManager(new GridLayoutManager(this, 2));            break;        case R.id.change_waterfall:            /**             * 瀑布流的效果             */            recyclerView.setLayoutManager(new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL));            break;        default:            break;    }}}     
1 0
原创粉丝点击