0

I RecycleView bin mit Daten angezeigt werden, in jeder ListItem hat 3-Taste: stat_btn, comment_btn und forward_btn. Ich möchte wissen, welche Schaltfläche der Benutzer geklickt hat, um die andere Funktion zu tun, also versuche ich in der Methode onClick mit view.getId() anzuzeigen, auf welche Schaltfläche geklickt wurde, aber view.getId() gibt immer -1 zurück;recycleview Klick Zuhörer, SubView klicken, view.getId() = -1

04-12 10:32:44.273 29382-29382/com.smartspace.magicmirror I/QUESTIONNAIREADAPTER: ---->>view.getid:-1 
04-12 10:32:44.273 29382-29382/com.smartspace.magicmirror I/QUESTIONNAIREFRAGMENT: ---->>onItemClick: -1 

hier ist mein Code: der Adapter

public class QuestionnaireAdapter extends RecyclerView.Adapter<QuestionnaireAdapter.QuestionnaireViewHolder> implements OnClickListener{ 

    private static final String TAG = "QUESTIONNAIREADAPTER"; 

    public Context context; 
    public Uri picTestUrl = Uri.parse("https://raw.githubusercontent.com/facebook/fresco/gh-pages/static/fresco-logo.png"); 
    public Uri picTestUrl2 = Uri.parse("http://magicwang.oss-cn-qingdao.aliyuncs.com/test.jpg"); 


    private OnRecycleViewItemClickListener mOnItemClickListener = null; 

    public interface OnRecycleViewItemClickListener { 
     void onItemClick(View view , String data); 
    } 

    public void setOnItemClickListener(OnRecycleViewItemClickListener listener) { 
     this.mOnItemClickListener = listener; 
    } 

    public QuestionnaireAdapter(Context context){ 
     this.context = context; 
    } 

    @Override 
    public QuestionnaireViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.fragment_questionnaire_item, parent, false); 

     QuestionnaireViewHolder questionnaireViewHolder = 
       new QuestionnaireViewHolder(view); 

     view.setOnClickListener(this); 

     return questionnaireViewHolder; 
    } 

    @Override 
    public void onBindViewHolder(final QuestionnaireViewHolder holder, int position) { 
     //holder.tv.setText("22"); 
     holder.dressImageView.setImageURI(picTestUrl2); 
     holder.itemView.setTag("tag"); 

    } 



    @Override 
    public int getItemCount() { 
     return 10; 
    } 

    @Override 
    public void onClick(View v) { 
     Log.i(TAG,"---->>view.getid:" + v.getId()); 
     if (mOnItemClickListener != null) { 
      mOnItemClickListener.onItemClick(v,(String)v.getTag()); 
     } 
    } 

ViewHolder

class QuestionnaireViewHolder extends RecyclerView.ViewHolder { 

     ImageView userIcon; 
     TextView userName; 
     TextView questionnaireTime; 
     SimpleDraweeView dressImageView; 

     //底部收藏、评论和转发按钮 
     ImageView starBtn; 
     ImageView commmentBtn; 
     ImageView forwardBtn; 


     public QuestionnaireViewHolder(View itemView) { 
      super(itemView); 
      userIcon = (ImageView) itemView.findViewById(R.id.user_icon); 
      userName = (TextView) itemView.findViewById(R.id.user_name); 
      questionnaireTime = (TextView) itemView.findViewById(R.id.questionnaire_time); 
      dressImageView = (SimpleDraweeView) itemView.findViewById(R.id.dress_imageview); 

      starBtn = (ImageView) itemView.findViewById(R.id.star_btn); 
      commmentBtn = (ImageView) itemView.findViewById(R.id.comment_btn); 
      forwardBtn = (ImageView) itemView.findViewById(R.id.forward_btn); 

     } 


    } 
} 

und das Fragment, das den Adapter und das recyclerView verwenden

public class QuestionnaireFragment extends Fragment { 

    public static final String TAG = "QUESTIONNAIREFRAGMENT"; 

    // TODO: Customize parameter argument names 
    private static final String ARG_COLUMN_COUNT = "column-count"; 
    // TODO: Customize parameters 
    private int mColumnCount = 1; 
    // private OnListFragmentInteractionListener mListener; 

    private RecyclerView qusetionnaireRecyclerView; 
    private QuestionnaireAdapter mQuestionnaireAdapter; 


    /** 
    * Mandatory empty constructor for the fragment manager to instantiate the 
    * fragment (e.g. upon screen orientation changes). 
    */ 
    public QuestionnaireFragment() { 
    } 

    // TODO: Customize parameter initialization 
    @SuppressWarnings("unused") 
    public static QuestionnaireFragment newInstance(int columnCount) { 
     QuestionnaireFragment fragment = new QuestionnaireFragment(); 
     Bundle args = new Bundle(); 
     args.putInt(ARG_COLUMN_COUNT, columnCount); 
     fragment.setArguments(args); 
     return fragment; 
    } 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 


     if (getArguments() != null) { 
      mColumnCount = getArguments().getInt(ARG_COLUMN_COUNT); 
     } 

     mQuestionnaireAdapter = new QuestionnaireAdapter(AppApplication.getContext()); 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.fragment_questionnaireitem_list, container, false); 

     qusetionnaireRecyclerView = (RecyclerView) view.findViewById(R.id.questionnaire_list); 
     qusetionnaireRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity())); 
     qusetionnaireRecyclerView.setAdapter(mQuestionnaireAdapter); 
     mQuestionnaireAdapter.setOnItemClickListener(new QuestionnaireAdapter.OnRecycleViewItemClickListener() { 
      @Override 
      public void onItemClick(View view, String data) { 
       Log.i(TAG,"---->>onItemClick: " + view.getId()); 
       switch (view.getId()) { 
        case R.id.star_btn: 
         //do something 
         break; 

        case R.id.comment_btn: 
         //do something 
         break; 

        case R.id.forward_btn: 
         //do something 
         break; 
       } 
      } 
     }); 


     return view; 
    } 



    @Override 
    public void onAttach(Context context) { 
     super.onAttach(context); 

    } 

    @Override 
    public void onDetach() { 
     super.onDetach(); 
      //mListener = null; 
     } 
    } 

Antwort

0

Dieses i s wie hätte ich es gemacht.

Deklarieren Sie die Tasten und ihre IDs in der onCreate:

stat = (Button)findViewById(R.id.stat_btn); 
cmnt = (Button)findViewById(R.id.comment_btn); 
fwd = (Button)findViewById(R.id.forward_btn): 

Dann einen Schalter in Ihrem onClick Methode definieren,

@Override 
    public void onClick(View v) { 

     switch (v.getId()) { 

      case R.id.stat_btn: 
        someFunction(); 
        //you can also call Log or Toast here 
       break; 
      case R.id.comment_btn: 
        someFunction2(); 
       break; 
      case R.id.forward_btn: 
        someFunction3(); 
       break; 

     } 
    } 
+0

aber in meinem Code, ich finde v.getId() = -1 –

+0

@ShuaiWang Sie haben Ihre Schaltflächen in Ihrem onCreate nicht deklariert, indem Sie findViewById ersten –

+0

Ich mache es in der –

0

hinzufügen OnClickListeners zu den Schaltflächen in onBindViewHolder()

für die Schaltfläche ids horcht
@Override 
    public void onBindViewHolder(final QuestionnaireViewHolder holder, int position) { 
     //holder.tv.setText("22"); 
     holder.dressImageView.setImageURI(picTestUrl2); 
     holder.itemView.setTag("tag"); 

     holder.starBtn.setOnClickListener(new OnClickListener()....); 
     holder.commmentBtn.setOnClickListener(new OnClickListener()....); 
     holder.forwardBtn.setOnClickListener(new OnClickListener()....); 

    } 

Keine Notwendigkeit zu implementieren OnItemClickListener Wenn Sie nur Kinderansichten und nicht ganze Elemente anhören möchten.