RecyclerView实现简单点击事件

来源:互联网 发布:php正则表达式邮箱注册 编辑:程序博客网 时间:2024/05/21 06:31

Adapter类中的内容

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> implements View.OnClickListener {    private String[] datas;    public MyAdapter(String[] datas) {        this.datas = datas;    }    private OnItemClickListener mOnItemClickListener = null;    //define interface    public static interface OnItemClickListener {        void onItemClick(View view, int position);    }    @Override    public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {        View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item, viewGroup, false);        ViewHolder vh = new ViewHolder(view);        //将创建的View注册点击事件        view.setOnClickListener(this);        return vh;    }    @Override    public void onBindViewHolder(ViewHolder viewHolder, int position) {        viewHolder.mTextView.setText(datas[position]);        //position保存在itemViewTag中,以便点击时进行获取        viewHolder.itemView.setTag(position);    }    @Override    public void onClick(View v) {        if (mOnItemClickListener != null) {            //注意这里使用getTag方法获取position            mOnItemClickListener.onItemClick(v, (int) v.getTag());        }    }    public void setOnItemClickListener(OnItemClickListener listener) {        this.mOnItemClickListener = listener;    }    //获取数据的数量    @Override    public int getItemCount() {        return datas.length;    }    //自定义的ViewHolder,持有每个Item的的所有界面元素    public static class ViewHolder extends RecyclerView.ViewHolder {        public TextView mTextView;        public ViewHolder(View view) {            super(view);            mTextView = (TextView) view.findViewById(R.id.text);        }    }}
xml布局

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="200dp"    android:orientation="vertical">    <TextView        android:id="@+id/text"        android:layout_width="wrap_content"        android:layout_height="wrap_content" /></LinearLayout>
MainActivity里的代码

public class MainActivity extends AppCompatActivity {    private RecyclerView mRecyclerView;    private LinearLayoutManager mLayoutManager;    private MyAdapter mAdapter;    private String[] data = new String[]{"1111", "2222", "3333", "4444", "5555", "6666", "7777", "8888", "9999", "aaaa", "bbbb", "cccc", "dddd", "eeee", "ffff", "gggg", "hhhh", "iiii", "jjjj", "kkkk"};    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        mRecyclerView = (RecyclerView) findViewById(R.id.main_rcView);        mLayoutManager = new LinearLayoutManager(this);        mRecyclerView.setLayoutManager(mLayoutManager);        //如果可以确定每个item的高度是固定的,设置这个选项可以提高性能        mRecyclerView.setHasFixedSize(true);        //创建并设置Adapter        mAdapter = new MyAdapter(data);        mRecyclerView.setAdapter(mAdapter);        mAdapter.setOnItemClickListener(new MyAdapter.OnItemClickListener() {            @Override            public void onItemClick(View view, int position) {                Toast.makeText(MainActivity.this, data[position], 600).show();            }        });    }    @Override    public boolean onCreateOptionsMenu(Menu menu) {        // Inflate the menu; this adds items to the action bar if it is present.        //getMenuInflater().inflate(R.menu.main, menu);        return true;    }    @Override    public boolean onOptionsItemSelected(MenuItem item) {        // Handle action bar item clicks here. The action bar will        // automatically handle clicks on the Home/Up button, so long        // as you specify a parent activity in AndroidManifest.xml.        int id = item.getItemId();        /*if (id == R.id.action_settings) {            return true;        }*/        return super.onOptionsItemSelected(item);    }}





原创粉丝点击