[英]Passing a listener to a recycler adapter
我已經知道回收器查看器的工作原理以及對接口偵聽器的良好理解,但我想知道為什么我們需要將偵聽器傳遞給我的回收器適配器,稱為mAdapter = new GreenAdapter
。 在我的MainActivity.java
我有這樣的東西
public class MainActivity extends AppCompatActivity implements GreenAdapter.ListItemClickListener {
private static final int NUM_LIST_ITEMS = 100;
private GreenAdapter mAdapter;
private RecyclerView mNumbersList;
private Toast mToast;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mAdapter = new GreenAdapter(NUM_LIST_ITEMS, this);
mNumbersList.setAdapter(mAdapter);
}
@Override
public void onListItemClick(int clickedItemIndex) {
String toastMessage = "Item #" + clickedItemIndex + "clicked.";
mToast = Toast.makeText(this, toastMessage, Toast.LENGTH_LONG);
mToast.show();
}
在我的GreenAdapter.java
中,我知道我的 Viewholder 構造函數將調用我的名為ListItemClickedListener
的自定義接口,傳入點擊視圖的 position 並從那里我可以實現代碼,當用戶通過我的onListItemClick
抽象方法點擊它時會發生什么
public class GreenAdapter extends RecyclerView.Adapter<GreenAdapter.NumberViewHolder> {
private static final String TAG = GreenAdapter.class.getSimpleName();
private int mNumberItems;
final private ListItemClickListener mOnClickListener;
public interface ListItemClickListener{
void onListItemClick(int clickedItemIndex);
}
public GreenAdapter(int numberOfItems, ListItemClickListener listener) {
mNumberItems = numberOfItems;
mOnClickListener = listener;
}
@Override
public NumberViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
Context context = viewGroup.getContext();
int layoutIdForListItem = R.layout.number_list_item;
LayoutInflater inflater = LayoutInflater.from(context);
boolean shouldAttachToParentImmediately = false;
View view = inflater.inflate(layoutIdForListItem, viewGroup, shouldAttachToParentImmediately);
NumberViewHolder viewHolder = new NumberViewHolder(view);
return viewHolder;
}
@Override
public void onBindViewHolder(NumberViewHolder holder, int position) {
Log.d(TAG, "#" + position);
holder.bind(position);
}
@Override
public int getItemCount() {
return mNumberItems;
}
class NumberViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
TextView listItemNumberView;
public NumberViewHolder(View itemView) {
super(itemView);
listItemNumberView = (TextView) itemView.findViewById(R.id.tv_item_number);
itemView.setOnClickListener(this);
}
void bind(int listIndex) {
listItemNumberView.setText(String.valueOf(listIndex));
}
@Override
public void onClick(View view) {
int clickedPosition = getAdapterPosition();
mOnClickListener.onListItemClick(clickedPosition);
}
}
我只是困惑為什么我們需要在我的回收器適配器中傳遞this
通過傳遞this
,您實際上是在傳遞MainActivity.java
的 object,它正在實現GreenAdapter.ListItemClickListener
接口。 現在,當您的用戶單擊項目時,您可以讓您的活動知道用戶單擊了列表中的哪個項目,然后將業務邏輯的 rest 寫入MainActivity
的onListItemClick()
方法中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.