Firebase RecyclerView ClickListener不从.onStart()调用 [英] Firebase RecyclerView ClickListener Not Being Called from .onStart()

查看:114
本文介绍了Firebase RecyclerView ClickListener不从.onStart()调用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我跟着这里。我基本上试图在我的 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()$ b $ .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 $ b $ public void onItemRangeInserted(int positionStart,int itemCount){
super.onItemRangeInserted(positionStart, itemCount);
int pollCount = mFireAdapter.getItemCount();
int lastVisiblePosition = mLayoutManager.findLastCompletelyVisibleItemPosition();

//如果回收者视图最初被加载,或者用户位于列表的底部,滚动
//到列表的底部显示新添加的消息。
if(lastVisiblePosition == -1 ||
(positionStart> = (pollCount - 1)&&& lastVisiblePosition ==(positionStart - 1))){
mRecyclerview.scrollToPosition(positionStart);
}
}
});



$ b

这里是我创建我的 ViewHolder()

$ p $ public static class PollHolder extends RecyclerView.ViewHolder {

TextView mPollQuestion ;
ImageView mPollImage;
查看mView;

public PollHolder(查看itemView){
super(itemView);

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



$ div class =h2_lin>解决方案

Turn这一行是搞砸了所有东西,并防止 RecyclerView 视图被点击:

  android:clickable =true


I followed the post here. I am essentially trying to set up a click listener in my RecyclerView. I am getting no response when I click an item in the RecyclerView. I have logged it and I'm not getting a call to the log when I click. Therefore, I know the .onClick() method is not firing. I initialize the adapter in .onStart(), as seen below:

@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);
            }
        }
    });
}

Here is where I create my 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;
    }
}

解决方案

Turns out this one line was screwing everything up and preventing the RecyclerView views from being clickable:

android:clickable="true"

这篇关于Firebase RecyclerView ClickListener不从.onStart()调用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆