首页 > 解决方案 > OnClick 多次触发

问题描述

我有这个方法:

public void questions_makealist() {
    qAdapter = new QandARecyclerViewAdapter(qandas);

    qanda_View.addOnItemTouchListener(new RecyclerTouchListener(getApplicationContext(), qanda_View, new ClickListener() { // en as ons op n boksie druk
        @Override
        public void onClick(View view, int position) {
            Log.e("Heeeeeeeeeeeeeeeeeeeee","On Clicked");
            QandA c_qanda = qandas.get(position);

            flip_it.setDisplayedChild(6);
            reply_View = findViewById(R.id.replies);

            TextView Question_Q = findViewById(R.id.QuestionC);
            TextView Question_A = findViewById(R.id.asked_byC);

            Question_Q.setText(c_qanda.getQuestion());
            Question_A.setText(c_qanda.getABN());

            QID_Reply = c_qanda.getQID();

            maak_die_lys_vir_replies();

        }
        public void onLongClick(View view,int position) {}
        //moet dit hier sit vir die method
    }));

    RecyclerView.LayoutManager qLayoutManager = new LinearLayoutManager(getApplicationContext());
    qanda_View.setLayoutManager(qLayoutManager);
    qanda_View.setAdapter(qAdapter);
    //net vir testing purposes
    //add_item("Ds.Hennie", "40 Dae Reeks: Herstel", 1, 1, "6 Maart 2017");
    qandas.clear();
    qAdapter.notifyDataSetChanged();
    getQuestions getq = new getQuestions();
    getq.execute();
}

由于某种原因,点击会触发我已经点击它的次数。例如,如果这是第三次点击,它实际上会在点击 3 次时调用它。

请参阅下面我设置的错误日志。

06-06 17:56:32.584 24779-24779/ng.Wilgespruit.com E/Heeeeeeeeeeeeeeeeeeeee: On Clicked
06-06 17:56:32.592 24779-24779/ng.Wilgespruit.com E/Heeeeeeeeeeeeeeeeeeeee: On Clicked
06-06 17:56:32.593 24779-24779/ng.Wilgespruit.com E/Heeeeeeeeeeeeeeeeeeeee: On Clicked

请帮忙

标签: javaandroidonclick

解决方案


发生这种情况是因为onTouchListener()在触摸视图时触发多次,而onClickListener()在单击时仅触发一次。

如果您想为onClickListener()RecyclerView 中的每个项目添加一个,您可以在适配器类中执行此操作。在适配器类中有两种方法可以做到这一点。

  • 将 onClickListener 设置onBindViewHolder()holder.itemView.setOnCLickListener()
  • 将其设置在适配器内部的 ViewHolder 类中。

设置 onClickListener 后,您还可以使用接口将事件从适配器传递回活动。


推荐阅读