RecyclerView点击事件

ゝ一世哀愁。 2024-02-17 15:55 33阅读 0赞
  1. package zhangphil.myrecyclerview;
  2. import android.support.v7.app.ActionBarActivity;
  3. import android.support.v7.widget.LinearLayoutManager;
  4. import android.support.v7.widget.RecyclerView;
  5. import android.support.v7.widget.RecyclerView.ViewHolder;
  6. import android.view.Gravity;
  7. import android.view.View;
  8. import android.view.ViewGroup;
  9. import android.widget.LinearLayout;
  10. import android.widget.TextView;
  11. import android.widget.Toast;
  12. import android.os.Bundle;
  13. /*
  14. * Android RecyclerView点击事件
  15. *
  16. *
  17. * Android最新的RecyclerView没有像之前的Android ListView那样事先已经提供好了
  18. * onItemClickListener()这样的回调事件响应用户点击。
  19. * 如果要实现类似ListView的onItemClickListener,则需要我们自己写代码实现。实现的思路和解决方案有多种。
  20. * 本案例的解决思路是这样的:
  21. * 第1步:自己写一个public interface OnRecyclerViewItemClickListener,此接口用于回调响应。用户的点击事件。
  22. * 第2步:把OnRecyclerViewItemClickListener new出来,其实就是完成里面的接口方法:onRecyclerViewItemClickListener()。我们将在onRecyclerViewItemClickListener方法体内完成类似ListView的onItemClickListener()。
  23. * 第3步,关键点。在此处,实现RecyclerView点击响应回调的解决方案出现多种选择和道路,本案例选择在ViewHolder的构造函数中为参数View增加点击事件:
  24. * public MyViewHolder(View itemView) {
  25. super(itemView);
  26. itemView.setOnClickListener(new View.OnClickListener() {
  27. @Override
  28. public void onClick(View v) {
  29. _click(v);
  30. }
  31. });
  32. }
  33. 然后我们在外部额外多写一个: _click(View v),然后调用_click(v)触发onRecyclerViewItemClickListener(注意:根据需求,此过程中可以携带和传递更多参数):
  34. _click(View v) {
  35. mOnRecyclerViewItemClickListener.onRecyclerViewItemClickListener(this, v, pos);
  36. }
  37. 至此,就完成了为RecyclerView增加点击响应时间的功能。
  38. *
  39. *
  40. * by Phil
  41. *
  42. * */
  43. public class MainActivity extends ActionBarActivity {
  44. // 增加点击事件接口 part 1
  45. private OnRecyclerViewItemClickListener mOnRecyclerViewItemClickListener = new OnRecyclerViewItemClickListener() {
  46. // 具体的点击事件在此
  47. @Override
  48. public void onRecyclerViewItemClickListener(ViewHolder holder,
  49. View view, int pos) {
  50. Toast.makeText(getApplication(), pos + "", Toast.LENGTH_SHORT)
  51. .show();
  52. }
  53. };
  54. public interface OnRecyclerViewItemClickListener {
  55. public void onRecyclerViewItemClickListener(ViewHolder holder,
  56. View view, int pos);
  57. }
  58. private RecyclerView mRecyclerView;
  59. // 测试用的数据集条目。
  60. private final int SIZE = 30;
  61. @Override
  62. protected void onCreate(Bundle savedInstanceState) {
  63. super.onCreate(savedInstanceState);
  64. setContentView(R.layout.activity_main);
  65. mRecyclerView = (RecyclerView) findViewById(R.id.my_recycler_view);
  66. LinearLayoutManager mLayoutManager = new LinearLayoutManager(this);
  67. // Orientation=LinearLayout.HORIZONTAL ,水平的“ListView”。
  68. // VERTICAL,就是以前的ListView样式。
  69. mLayoutManager.setOrientation(LinearLayout.HORIZONTAL);
  70. mRecyclerView.setLayoutManager(mLayoutManager);
  71. RecyclerView.Adapter mAdapter = new MyRecyclerViewAdapter();
  72. mRecyclerView.setAdapter(mAdapter);
  73. }
  74. public class MyRecyclerViewAdapter extends
  75. RecyclerView.Adapter<MyViewHolder> {
  76. public MyRecyclerViewAdapter() {
  77. super();
  78. }
  79. @Override
  80. public MyViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
  81. TextView tv = new TextView(getApplication());
  82. tv.setPadding(20, 10, 20, 10);
  83. tv.setGravity(Gravity.CENTER);
  84. MyViewHolder holder = new MyViewHolder(tv);
  85. holder.text = tv;
  86. return holder;
  87. }
  88. @Override
  89. public void onBindViewHolder(MyViewHolder viewHolder, int pos) {
  90. viewHolder.text.setText("pos:" + pos);
  91. viewHolder.pos = pos;
  92. }
  93. @Override
  94. public int getItemCount() {
  95. return SIZE;
  96. }
  97. }
  98. private class MyViewHolder extends RecyclerView.ViewHolder {
  99. public TextView text;
  100. public int pos;
  101. public MyViewHolder(View itemView) {
  102. super(itemView);
  103. itemView.setOnClickListener(new View.OnClickListener() {
  104. @Override
  105. public void onClick(View v) {
  106. _click(v);
  107. }
  108. });
  109. }
  110. // 增加点击事件接口 part 2,触发点击事件。
  111. private final void _click(View v) {
  112. mOnRecyclerViewItemClickListener.onRecyclerViewItemClickListener(
  113. this, v, pos);
  114. }
  115. }
  116. }

activity_main.xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent"
  5. android:orientation="vertical" >
  6. <android.support.v7.widget.RecyclerView
  7. android:id="@+id/my_recycler_view"
  8. android:layout_width="match_parent"
  9. android:layout_height="match_parent" />
  10. </LinearLayout>



发表评论

表情:
评论列表 (有 0 条评论,33人围观)

还没有评论,来说两句吧...

相关阅读