簡體   English   中英

將偵聽器傳遞給回收器適配器

[英]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 寫入MainActivityonListItemClick()方法中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM