【问题标题】:android FirebaseRecyclerAdapter click on item not workingandroid FirebaseRecyclerAdapter 点击项目不起作用
【发布时间】:2018-09-03 10:22:42
【问题描述】:

我在我的 android 项目中显示来自 Firebase 数据库的一些数据,但是当我点击该项目时,没有任何触发我的意思是点击不起作用

这是我的活动

public class Notification extends AppCompatActivity {
    private RecyclerView mPeopleRV;
    private DatabaseReference mDatabase;
    private FirebaseRecyclerAdapter<News, Notification.NewsViewHolder> mPeopleRVAdapter;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mDatabase = FirebaseDatabase.getInstance().getReference().child("XXXXXXXXXXX");
        mDatabase.keepSynced(true);
        mPeopleRV = (RecyclerView) findViewById(R.id.myRecycleView);
        DatabaseReference personsRef = FirebaseDatabase.getInstance().getReference().child("XXXXXXXXXXX");
        Query personsQuery = personsRef.orderByChild("date");
        mPeopleRV.hasFixedSize();
        LinearLayoutManager mLayoutManager = new LinearLayoutManager(Notification.this);
        mLayoutManager.setReverseLayout(true);
        mLayoutManager.setStackFromEnd(true);
        mPeopleRV.setLayoutManager(mLayoutManager);
        FirebaseRecyclerOptions personsOptions = new FirebaseRecyclerOptions.Builder<News>().setQuery(personsQuery, News.class).build();
        mPeopleRVAdapter = new FirebaseRecyclerAdapter<News, NewsViewHolder>(personsOptions) {
            @Override
            protected void onBindViewHolder(Notification.NewsViewHolder holder, final int position, final News model) {
                holder.setTitle(capitalize(model.getName()));
                //this click is not working 
                holder.mView.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                         String pos =  mPeopleRVAdapter.getRef(position).getKey();
                        Toast.makeText(getApplicationContext(), "dsdsdsd", Toast.LENGTH_SHORT).show();
                    }
                });
            }
        };
        mPeopleRV.setAdapter(mPeopleRVAdapter);
    }
    @Override
    public void onStart() {
        super.onStart();
        mPeopleRVAdapter.startListening();
    }
    @Override
    public void onStop() {
        super.onStop();
        mPeopleRVAdapter.stopListening();
    }
    public static class NewsViewHolder extends RecyclerView.ViewHolder {
        View mView;
        public NewsViewHolder(View itemView) {
            super(itemView);
            mView = itemView;
        }
        public void setTitle(String title) {
            String output = title.substring(0, 1).toUpperCase() + title.substring(1);
            TextView post_title = (TextView) mView.findViewById(R.id.post_title);
            post_title.setText(output);
        }
    }
}

我找不到上面的代码有什么问题,我正在尝试从过去 4.5 小时开始修复这个问题,我还需要那个 firebase 子对象的 key项目被点击

【问题讨论】:

  • 你好,山姆。看看这个问题,也许那个代码可以帮助你。 stackoverflow.com/questions/38263336/…
  • 我已经看到,实际上我是 android 新手,我找不到丢失的东西,所以你能告诉我我需要对代码进行哪些更改才能按预期工作吗?
  • 如果您有兴趣,推荐使用 this 方法,您可以通过该方法从 Firebase 实时数据库中检索数据并使用 FirebaseRecyclerAdapter 将其显示在 RecyclerView 中.

标签: android firebase firebase-realtime-database firebaseui


【解决方案1】:

我一直在检查一些示例代码,我认为您缺少将项目布局创建到适配器的 onCreateViewHolder 方法。

代码:

DatabaseReference personsRef = FirebaseDatabase.getInstance().getReference().child("XXXXXXXXXXX");

        FirebaseRecyclerOptions personsOptions = new FirebaseRecyclerOptions.Builder<News>().setQuery(personsQuery, News.class).build();

        mPeopleRVAdapter = new FirebaseRecyclerAdapter<News, NewsViewHolder>(personsOptions) {
            //I think you are missing this part.
            @Override
            public NewsViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
                View view = LayoutInflater.from(parent.getContext())
                        .inflate(R.layout.item_message, parent, false);

                return new NewsViewHolder(view);
            }

            @Override
            protected void onBindViewHolder(Notification.NewsViewHolder holder, final int position, final News model) {
                holder.setTitle(capitalize(model.getName()));
                //this click is not working
                holder.mView.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        String pos =  mPeopleRVAdapter.getRef(position).getKey();
                        Toast.makeText(getApplicationContext(), "dsdsdsd", Toast.LENGTH_SHORT).show();
                    }
                });
            }
        };

希望对你有帮助。

【讨论】:

  • "item_message" 这是什么
  • 任何 id 或布局?
  • item message 是表示您的项目的布局,您需要创建一个包含您想要显示的内容的布局。在您的情况下,您需要一个带有帖子标题的布局
  • 是的,我有那个布局,当我用那个布局的名称代替“item_message”时,还有另一个错误> onCreateViewHolder(ViewGroup, int)' 已经在“从 com. firebase.ui.database.FirebaseRecyclerAdapter
  • 我无法在我的电脑上回复整个代码,看看这个解决方案:你的代码需要看起来很相似stackoverflow.com/questions/46859983/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-13
  • 2014-01-08
  • 1970-01-01
  • 2018-07-03
  • 2017-10-18
  • 2022-01-07
相关资源
最近更新 更多