android - Groupie 适配器中的 SetOnItemClickListener 不起作用
问题描述
我使用 groupie lib 来显示我从 firebase 数据库中获取的项目。但是当我想在 Groupie 适配器中执行 setOnItemClickListener 时,什么也没有发生
DatabaseReference ref = FirebaseDatabase.getInstance().getReference("/users");
ref.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
adapter = new GroupAdapter();
for (DataSnapshot ds:dataSnapshot.getChildren()) {
Userinfo user = ds.getValue(Userinfo.class);
if(user !=null)
adapter.add(new ContactItem(user));
}
newmessage_recyclerview.setLayoutManager(new LinearLayoutManager(getApplicationContext()));
newmessage_recyclerview.addItemDecoration(new DividerItemDecoration(getApplicationContext(),DividerItemDecoration.VERTICAL));
newmessage_recyclerview.setAdapter(adapter);
adapter.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(@NonNull Item item, @NonNull View view) {
Log.d("main", String.valueOf(item.getId()));
}
});
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
解决方案
您的适配器和列表视图应该在外部进行初始化和分配onDataChange() method
,如您所见,每次您从 firebase 数据库更改的数据时,适配器都会更改并且列表视图会重复设置,这是多余的。尝试这个。
//set up adapter and listview one time only
adapter = new GroupAdapter();
newmessage_recyclerview.setLayoutManager(new
LinearLayoutManager(getApplicationContext()));
newmessage_recyclerview.addItemDecoration(new
DividerItemDecoration(getApplicationContext(),DividerItemDecoration.VERTICAL));
newmessage_recyclerview.setAdapter(adapter);
adapter.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(@NonNull Item item, @NonNull View view) {
Log.d("main", String.valueOf(item.getId()));
}
});
DatabaseReference ref = FirebaseDatabase.getInstance().getReference("/users");
ref.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for (DataSnapshot ds:dataSnapshot.getChildren()) {
Userinfo user = ds.getValue(Userinfo.class);
if(user !=null)
adapter.add(new ContactItem(user));
adapter.notifyDataSetChanged();
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
推荐阅读
- java - 如何使用所需参数模拟 Runnable 子类的 run() 方法
- java - 在 macOS Big Sur 上使用 Docker 映像和 RemoteWebDriver 的 Chrome 浏览器的 Selenium 问题 - 未知错误:DevToolsActivePort 文件不存在
- javascript - 在组件内使用注入的插件会导致问题
- sql-server - 用于比较 SQL 登录的 Powershell 脚本
- javascript - 我无法使用 sequalize 节点在 MySQL 中设置本地“时区”
- google-chrome - 防止赛普拉斯在测试运行时最大化/聚焦浏览器窗口
- python - 乘以 CSR 稀疏矩阵的列
- jhipster - Jhipster 相关查询
- c# - EF Core - API 站点:在前一个操作完成之前在此上下文中启动了第二个操作
- postgresql - Docker:PostgresSQL - 使用与数据库的连接发生错误