【问题标题】:Firebase RecyclerView ClickListener Not Being Called from .onStart()未从 .onStart() 调用 Firebase RecyclerView ClickListener
【发布时间】:2016-12-22 04:32:41
【问题描述】:

我关注了here 的帖子。我实际上是想在我的RecyclerView 中设置一个点击监听器。当我单击RecyclerView 中的一个项目时,我没有得到任何响应。我已经记录了它,当我点击时我没有接到对日志的调用。因此,我知道 .onClick() 方法没有触发。我在.onStart()中初始化了适配器,如下图:

@Override
public void onStart() {
    super.onStart();

    mFireAdapter = new FirebaseRecyclerAdapter<Poll, PollHolder>(Poll.class, R.layout.latest_item, PollHolder.class, mBaseRef.child("Polls")) {
        @Override
        protected void populateViewHolder(PollHolder viewHolder, Poll model, final int position) {
            viewHolder.mPollQuestion.setText(model.getQuestion());
            Picasso.with(getActivity().getApplicationContext())
                    .load(model.getImage_URL())
                    .fit()
                    .into(viewHolder.mPollImage);
            viewHolder.mView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    Log.v("TAG","ONCLICKED");
                    Intent toPoll = new Intent(getActivity(), PollHostActivity.class);
                    toPoll.putExtra("POLL_ID", mFireAdapter.getRef(position).getKey());
                    startActivity(toPoll);

                }
            });
            Log.v("TAG", mFireAdapter.getRef(position).getKey());
            Log.v("TAG", String.valueOf(position));
            Log.v("TAG", model.getQuestion());
            Log.v("TAG", model.getImage_URL());
        }
    };

    mRecyclerview.setAdapter(mFireAdapter);

    mFireAdapter.registerAdapterDataObserver(new RecyclerView.AdapterDataObserver() {
        @Override
        public void onItemRangeInserted(int positionStart, int itemCount) {
            super.onItemRangeInserted(positionStart, itemCount);
            int pollCount = mFireAdapter.getItemCount();
            int lastVisiblePosition = mLayoutManager.findLastCompletelyVisibleItemPosition();

            // If the recycler view is initially being loaded or the user is at the bottom of the list, scroll
            // to the bottom of the list to show the newly added message.
            if (lastVisiblePosition == -1 ||
                    (positionStart >= (pollCount - 1) && lastVisiblePosition == (positionStart - 1))) {
                mRecyclerview.scrollToPosition(positionStart);
            }
        }
    });
}

这是我创建 ViewHolder() 的地方:

 public static class PollHolder extends RecyclerView.ViewHolder {

    TextView mPollQuestion;
    ImageView mPollImage;
    View mView;

    public PollHolder(View itemView) {
        super(itemView);

        mPollQuestion = (TextView) itemView.findViewById(R.id.latest_item_question);
        mPollImage = (ImageView) itemView.findViewById(R.id.pollThumbNailImage);
        this.mView = itemView;
    }
}

【问题讨论】:

    标签: android firebase android-recyclerview firebase-realtime-database firebaseui


    【解决方案1】:

    在recyclerView中你可以在recyclerview Adapter中设置clicklistener 这对我有用

    public class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
        ImageView imageView;
        public MyViewHolder(View view) {
            super(view);
            view.setOnClickListener(this); //clicklistner on recyclerview Item
            imageView = (ImageView) view.findViewById(R.id.grid_item_image);
        }
    
        @Override
        public void onClick(View v) {
            //Log.d(TAG, "onClick " + getPosition());
            Toast.makeText(activity, "onClick "+ getPosition(), Toast.LENGTH_SHORT).show();
    
        }
    }
    

    【讨论】:

    • viewholder类不需要是静态的吗?
    • 还没试过会让你知道的。感谢您的及时回复。我以前因为没有静态查看器而遇到错误。它是一个内部类,也许我需要把它变成一个单独的模型类......
    • 另外,我需要将 onPopulateViewholder 方法中的位置变量传递到我的 onClick 中,这就是我需要在该方法中执行此操作的原因
    • 仅供参考 - 解决方案不起作用。由于某种原因 .onClick() 没有被调用 - 知道为什么吗?
    【解决方案2】:

    事实证明,这一行把所有事情都搞砸了,并阻止了 RecyclerView 视图被点击:

    android:clickable="true"
    

    【讨论】:

      猜你喜欢
      • 2021-02-08
      • 1970-01-01
      • 1970-01-01
      • 2014-01-07
      • 1970-01-01
      • 2020-05-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多