butterknife @OnClick inside ViewHolder in CustomAdapter

前端 未结 4 1922
耶瑟儿~
耶瑟儿~ 2021-01-13 20:59

I\'m currently learning butterknife, and I need to bind specific @OnClicks on different views generated by my customer adapter. How do I go about with this?

I\'ve se

相关标签:
4条回答
  • 2021-01-13 21:27

    I have this ViewHolder..

    public class ViewHolder extends RecyclerView.ViewHolder {
            @Bind(R.id.item_tipo_evento_estado_text) TextView text;
            @Bind(R.id.item_text_radiobutton_check) AppCompatCheckBox checkBox;
            public ViewHolder(View itemView) {
                super(itemView);
                ButterKnife.bind(this, itemView);
            }
    
            @OnClick(R.id.btnCheck)
            public void onCheck() {
                Log.d("ViewHolder", "position ->" + getAdapterPosition());
            }
        }
    

    ok my R.id.btnCheck is my id of LinearLayout content all Views

    0 讨论(0)
  • 2021-01-13 21:32

    As @Ugur has suggested you would initiate your ViewHolder using butterknife. You can add an on click listener to a view by doing this as an example for the userName View:

    @OnClick(R.id.user_name)
    public void clickedUserName(SocialEyeTextView userName)
    {
        //Do something with user name
    }
    
    0 讨论(0)
  • 2021-01-13 21:39

    Imagine you have a ViewHolder like this.

    static class ViewHolder {
    
        @InjectView(R.id.user_name)
        TextView userName;
    
        @InjectView(R.id.user_title)
        TextView userTitle;
    
    
        public ViewHolder(View view) {
            ButterKnife.inject(this, view);
        }
    
    }
    

    You can bind events in your adapters getView method for each view in your holder.

     @Override
    public View getView(int position, View convertView, ViewGroup parent) {
    
        final ViewHolder holder;
        if (convertView != null) {
            holder = (ViewHolder) convertView.getTag();
        } else {
            convertView = LayoutInflater.from(mContext).inflate(
                    R.layout.your_row_layout, parent, false);
            holder = new ViewHolder(convertView);
            convertView.setTag(holder);
        }
    
       holder.userName.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //Your stuff here
            }
        });
    
    
        holder.userTitle.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
               //Your stuff here  
            }
        });
    
        return convertView;
    
    }
    
    0 讨论(0)
  • 2021-01-13 21:39

    write this code in ViewHolder class

    static class ViewHolder {
        public int getPosition;
    
        @Nullable
        @Bind(R.id.txt_title_name)
        TextView txtTitle;   
    
     public ViewHolder(View view) {
            ButterKnife.bind(this, view);
        }
    
    
        @OnClick(R.id.btn_download)
        public void onCheck() {
            Log.d("ViewHolder", "position ->" + getPosition);
        }
    }
    
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
    
    holder.getPosition = position;
    }
    
    0 讨论(0)
提交回复
热议问题