Adapter中傳入監聽listener與應用時Tag的結合使用
阿新 • • 發佈:2019-01-07
相隔數月不見終於又見到大家了,最近換了份新工作,一直在忙,學到了很多很實用的東西,接下來會一一分享給大家。
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的使用,降低效能消耗。
這篇文章就簡單到這了,比較簡單,大家多多支援!!!