RecyclerView的監聽(介面回撥,自定義)
阿新 • • 發佈:2018-12-21
依賴
implementation 'com.android.support:recyclerview-v7:27.1.1'
MainActivity程式碼 呼叫介面卡,傳值
public class MainActivity extends AppCompatActivity { private RecyclerView recycler; private List<String> titleName; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //初始化資料 initData(); recycler = (RecyclerView) findViewById(R.id.recycler); //設定佈局 LinearLayoutManager manager = new LinearLayoutManager(this,LinearLayoutManager.VERTICAL,false); recycler.setLayoutManager(manager); //開啟介面卡 MyRecyclerAdapter myRecyclerAdapter = new MyRecyclerAdapter(titleName, MainActivity.this); recycler.setAdapter(myRecyclerAdapter); //監聽方法 myRecyclerAdapter.setOnItemClickLisitenter(new RecycleViewLisitenter.onItemClickLisitenter() { @Override public void onItemClick(View v, int position) { Toast.makeText(MainActivity.this,position+"",Toast.LENGTH_SHORT).show(); } }); } private void initData() { titleName = new ArrayList<>(); for (int i = 0;i < 100 ;i++){ titleName.add("第"+i+"個"); } } }
MyRecyclerAdapter 這是我的介面卡,在介面卡裡邊寫點選事件的構造方法,進行引用我自定義的介面
public class MyRecyclerAdapter extends RecyclerView.Adapter implements View.OnClickListener, View.OnLongClickListener { private List<String> list; private Context context; public MyRecyclerAdapter(List<String> list, Context context) { this.list = list; this.context = context; } private RecycleViewLisitenter.onItemClickLisitenter onItem; private RecycleViewLisitenter.onItemLongClickLisitenter onLongItem; public void setOnItemClickLisitenter(RecycleViewLisitenter.onItemClickLisitenter onItem) { this.onItem = onItem; } public void setOnItemLongClickLisitenter(RecycleViewLisitenter.onItemLongClickLisitenter onLongItem) { this.onLongItem = onLongItem; } class MyHoder extends RecyclerView.ViewHolder { public TextView text; public MyHoder(View itemView) { super(itemView); text = itemView.findViewById(R.id.txt_title); } } @NonNull @Override public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { View view = View.inflate(context, R.layout.item, null); view.setOnClickListener(this); view.setOnLongClickListener(this); MyHoder myHoder = new MyHoder(view); return myHoder; } @Override public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) { MyHoder myHoder = (MyHoder) holder; myHoder.itemView.setTag(position); myHoder.text.setText(list.get(position)); } @Override public int getItemCount() { return list.size(); } @Override public void onClick(View view) { if(onItem!=null){ onItem.onItemClick(view, (Integer) view.getTag()); } } @Override public boolean onLongClick(View view) { if(onLongItem!=null){ onLongItem.onItemLongClick(view, (Integer) view.getTag()); } return true; } }
RecycleViewLisitenter 自定義的介面,接口裡邊有抽象方法,自定義設定監聽
public class RecycleViewLisitenter {
public interface onItemClickLisitenter{
void onItemClick(View v, int position);
};
public interface onItemLongClickLisitenter{
void onItemLongClick(View v,int position);
};
}