有一些不同的方法來做到這一點。第一種方法是這樣做的:
RecyclerView recyclerView = findViewById(R.id.recycler);
recyclerView.addOnItemTouchListener(
new RecyclerItemClickListener(context, recyclerView ,new RecyclerItemClickListener.OnItemClickListener() {
@Override public void onItemClick(View view, int position) {
// do whatever
}
@Override public void onLongItemClick(View view, int position) {
// do whatever
}
})
);
或者你可以在ViewHolder中做到這一點。
我們需要一個監聽器接口。
public interface OnItemClickListener {
public void onClick(View view, int position);
}
在你的RecyclerView適配器您ViewHolder類中,實現View.OnClickListener,監聽綁定到視圖。在onClick方法中,調用接口OnItemClickListener的onClick方法。這應該從你的RecycyclerView的構造函數中傳入。 onclick事件的實際實現將來自包含此RecyclerView的活動或片段。這裏重要的一行是clickListener.onClick(view,getPosition()); clickListener是RecyclerView類中的全局變量,它也應該從您的RecyclerView的構造函數中傳入。
public static class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
public TextView cityName;
public ViewHolder(View view) {
super(view);
cityName = (TextView) view.findViewById(R.id.city_name);
itemView.setOnClickListener(this); // bind the listener
}
@Override
public void onClick(View view) {
clickListener.onClick(view, getPosition()); // call the onClick in the OnItemClickListener
} }
在活動類的onclick實施方式中,重要的線這裏是mAdapter.setClickListener(本);和onClick方法。 onClick方法從您的RecyclerView類的ViewHolder的onClick方法中觸發,該方法傳遞單擊項目的視圖和位置。
public class CityActivity extends Activity implements ItemClickListener {
private RecyclerView mRecyclerView;
private CityAdapter mAdapter;
private List<City> cities;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_city);
cities = CityManager.getInstance(this.getApplicationContext()).getCites();
mRecyclerView = (RecyclerView)findViewById(R.id.list);
mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
mRecyclerView.setItemAnimator(new DefaultItemAnimator());
mAdapter = new CityAdapter(cities, R.layout.row_city, this);
mRecyclerView.setAdapter(mAdapter);
mAdapter.setClickListener(this); // Bind the listener
}
@Override
public void onClick(View view, int position) {
// The onClick implementation of the RecyclerView item click
final City city = cities.get(position);
Intent i = new Intent(this, CityviewActivity.class);
i.putExtra("city", city.name);
i.putExtra("desc", city.description);
i.putExtra("image", city.imageName);
Log.i("hello", city.name);
startActivity(i);
}
}
請閱讀我不想對項目點擊的問題。我只需要Recyclerview或relativelayout的onclick – Sishin