1. 程式人生 > >Adapter中傳入監聽listener與應用時Tag的結合使用

Adapter中傳入監聽listener與應用時Tag的結合使用

相隔數月不見終於又見到大家了,最近換了份新工作,一直在忙,學到了很多很實用的東西,接下來會一一分享給大家。

Adapter傳入監聽

1.實現監聽 

public class PopularFragment extends BaseMvpFragment<PopularInterface.PopularPresenterInterface> implements PopularInterface.PopularViewInterface, View.OnClickListener {}

2.傳入監聽

 cityPopularOrNearbyNewsAdapter = new CityPopularOrNearbyNewsAdapter(getActivity(),mnewestData, this);
        recyclerView.setAdapter(cityPopularOrNearbyNewsAdapter);

3.Adapter中接收監聽、設定監聽、設定Tag

  • 接收監聽
    private View.OnClickListener listener;
    
    public CityPopularOrNearbyNewsAdapter(Activity mActivity, List<CityPopularResponseBeanR.DataBean> data, View.OnClickListener listener) {
        this.mActivity = mActivity;
        this.data = data;
        this.listener = listener;
    }
  • 設定監聽
 @Override
    public Holder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(mActivity).inflate(R.layout.item_citypopular_or_nearbynews1, parent, false);
        Holder holder = new Holder(view);
        holder.tv_zan_num.setOnClickListener(this.listener);
        holder.rl_item.setOnClickListener(this.listener);
        holder.ll_comment_num.setOnClickListener(this.listener);
        holder.cir_head_photo.setOnClickListener(this.listener);
        holder.ll_share_num.setOnClickListener(this.listener);
        holder.ll_complaint.setOnClickListener(this.listener);
        return holder;
    }
  • 設定Tag
     holder.rl_item.setTag(R.id.pos_explore_rl_item, position);
        holder.ll_comment_num.setTag(R.id.pos_explore_ll_comment_num, position);
        holder.cir_head_photo.setTag(R.id.pos_explore_cir_head_photo, position);
        holder.ll_share_num.setTag(R.id.pos_explore_ll_share_num, position);
        holder.ll_complaint.setTag(R.id.pos_explore_ll_complaint, position);
        holder.tv_zan_num.setTag(R.id.pos_zan_num, position);
        holder.tv_zan_num.setTag(holder.iv_zan_num);

 setTag有兩種,一種為setTag(int key,object tag) ,一種為setTag(object tag);而第一種的key 可以在 ids.xml 中設定id

    <item name="pos_explore_rl_item" type="id" />
    <item name="pos_explore_ll_comment_num" type="id" />
    <item name="pos_explore_cir_head_photo" type="id" />

 tag可以設定為條目的position,第二種我們可以根據我們的需求而定 ,在這裡我的需求時點選控制元件時要獲取到另一個控制元件的id ,所以我設定上

4.獲取Tag 並使用

  •  獲取Tag
  @Override
    public void onClick(View view) {
        switch (view.getId()) {
            case R.id.tv_zan_num:
                int pos_zan_num = (int) view.getTag(R.id.pos_zan_num);
                ImageView iv_zan_num = (ImageView) view.getTag();
                TextView zan_num = (TextView) view;
                zanClick(pos_zan_num, iv_zan_num, zan_num);
                break;
......

 在V層,實現了監聽,生成onClick ,  case R.id.tv_zan_num: 就是我們在adapter中設定的監聽的控制元件id;int pos_zan_num = (int) view.getTag(R.id.pos_zan_num),得到我們設定的position ; ImageView iv_zan_num = (ImageView) view.getTag(),得到我們設定的所需要的控制元件id;TextView zan_num = (TextView) view,得到R.id.tv_zan_num的變數。

zanClick(pos_zan_num, iv_zan_num, zan_num),應用得到的值。

這樣我們在adapter中就大大減少了控制元件監聽時 new onClick的使用,降低效能消耗。

這篇文章就簡單到這了,比較簡單,大家多多支援!!!