【问题标题】:Try to use onClick in RecyclerView and it doesn't work尝试在 RecyclerView 中使用 onClick 并不起作用
【发布时间】:2019-11-21 20:21:31
【问题描述】:

我尝试在我点击的回收站视图上为按钮着色。

public class OneActiveButtonAdapter 
        extends RecyclerView.Adapter<OneActiveButtonAdapter.ViewHolder> {

    public class ViewHolder extends RecyclerView.ViewHolder 
            implements View.OnClickListener {

        private Button button;
        private WeakReference<ClickListener> listenerWR;


        ViewHolder(View view, ClickListener listener) {
            super(view);
            button = view.findViewById(R.id.button);
            button.setBackgroundColor(Color.WHITE);
            listenerWR = new WeakReference<>(listener);
        }

        @Override
        public void onClick(View view) {
            Log.d("PRESSED", "BUTTON IS PRESSED");
        }
    }

    public interface ClickListener {
        void onPositionClicked(int position);
    }

    private ClickListener clickListener;
    private List<Payable> buttons;
    private int indexOfActivatedButton = -1;

    public OneActiveButtonAdapter(List<Payable> buttons, ClickListener clickListener) {
        this.buttons = buttons;
        this.clickListener = clickListener;
    }

    @Override
    public int getItemCount() {
        return buttons.size();
    }

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int ind) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.buttons_linear_layout,
                parent, false);
        return new ViewHolder(view, clickListener);
    }

    @Override
    public void onBindViewHolder(ViewHolder viewHolder, int ind) {
        viewHolder.button.setText(buttons.get(ind).getTitle());
        if (indexOfActivatedButton == ind) {
            viewHolder.button.setBackgroundColor(Color.GREEN);
        } else {
            viewHolder.button.setBackgroundColor(Color.WHITE);
        }
    }
}

'''

还有代码,当我为 '''RecyclerView''' 创建适配器时:

'''

OneActiveButtonAdapter foodRVAdapter = new OneActiveButtonAdapter(food,
        new OneActiveButtonAdapter.ClickListener() {
            @Override
            public void onPositionClicked(int position) {
                Log.d("POSITION", String.valueOf(position));
            }
        });

'''

当我尝试单击 RecyclerView 上的某个按钮时,我希望看到日志,但它没有输出。我也尝试 setOnClickListener 按钮,但它并没有改变什么。 能有什么麻烦?

【问题讨论】:

  • 您似乎还没有在onClick()中呼叫您的听众
  • @user3170251,这如何影响日志不输出的事实?我认为,没有必要。
  • 澄清一下,您在 logcat 中没有看到 Log.d("PRESSED", "BUTTON IS PRESSED");
  • @user3170251,是的。
  • 尝试在 ViewHolder 构造函数中调用 view.setOnClickListener(this)

标签: android android-recyclerview onclick listener


【解决方案1】:

因为您没有 setListener 到您的按钮。

删除listenerWR = new WeakReference&lt;&gt;(listener);

试试这个button.setOnClickListener(this);

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 2018-01-07
    • 1970-01-01
    • 2020-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多