- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我在单击适配器内的布局时运行事务,但是当我单击布局时,事务成功运行。但它在我的 RecyclerView
中创建了另一个项目。我在事务中尝试了 notifydatasetChanged() 但它会产生错误:
CalledFromWrongThreadException: Only the original thread that created a view
hierarchy can touch its views.
然后我尝试将 notifyDataSetChanged() 放在事务之外,但它不起作用。以下是我正在做的事情:
holder.follow.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(final View view) {
DatabaseReference mWorkDatabase =
FirebaseDatabase.getInstance().getReference()
.child("WorkforWorkMen").child(work_id).child("follower");
mWorkDatabase.runTransaction(new Transaction.Handler() {
@Override
public Transaction.Result doTransaction(MutableData
mutableData) {
if(holder.followText.getText().equals("Follow")) {
holder.followText.setText("Following");
FirebaseAuth mAuth = FirebaseAuth.getInstance();
String current_user =
mAuth.getCurrentUser().getUid();
DatabaseReference mFollowingDatabase =
FirebaseDatabase.getInstance().getReference()
.child("WorkFollowing").child(current_user).child(work_id);
final Map fol = new HashMap();
fol.put("follower",work_id);
mFollowingDatabase.setValue(fol);
mutableData.setValue
(Integer.parseInt(mutableData.getValue().toString()) + 1);
}
else {
holder.followText.setText("Follow");
FirebaseAuth mAuth = FirebaseAuth.getInstance();
String current_user =
mAuth.getCurrentUser().getUid();
DatabaseReference mFollowingDatabase =
FirebaseDatabase.getInstance().getReference()
.child("WorkFollowing").child(current_user).child(work_id);
mFollowingDatabase.setValue(null);
mutableData.setValue(Integer
.parseInt(mutableData.getValue().toString()) - 1);
}
return Transaction.success(mutableData);
}
@Override
public void onComplete(DatabaseError databaseError,
boolean b, DataSnapshot dataSnapshot) {
Toast.makeText(context,"error on complete"+
String.valueOf(databaseError), Toast.LENGTH_SHORT).show();
Log.i("eror here", "onComplete:
"+String.valueOf(databaseError));
}
});
new Handler(Looper.getMainLooper()).post(new Runnable() {
@Override
public void run() {
Toast.makeText(context, "here",
Toast.LENGTH_SHORT).show();
notifyDataSetChanged();
}
});
}
});
我想当我将数据添加到我的列表时,关注者值(value)的变化会导致它添加一个新项目,但我不确定
private void loadMessages(){
if(keys.size() == 0){
messagesList.clear();
Toast.makeText(getContext(), " size zero no results found",
Toast.LENGTH_SHORT).show();
}
else {
messagesList.clear();
for (int i = 0; i < 5; i++) {
if (i>=keys.size()){
Toast.makeText(getContext(), "list is less than 5 item",
Toast.LENGTH_SHORT).show();
}
else {
listPos = i;
String id = keys.get(i);
mWorkDatabase.child(id).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
String messageKey = dataSnapshot.getKey();
NewWork message = dataSnapshot.getValue(NewWork.class);
itemPos++;
messagesList.add(message);
mAdapter.notifyDataSetChanged();
mRecyclerView2.scrollToPosition(messagesList.size() - 1);
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
}
}
}
最佳答案
您正在从后台线程
调用notifyDataSetChanged()
,您需要从ui线程
调用它,如下所示
new Handler(Looper.getMainLooper()).post(new Runnable() {
@Override
public void run() {
notifyDataSetChanged();
}
});
关于java - 回收站 View 中的重复项,notifydatasetchanged 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50926149/
今天有小伙伴给我留言问到,try{...}catch(){...}是什么意思?它用来干什么? 简单的说 他们是用来捕获异常的 下面我们通过一个例子来详细讲解下
我正在努力提高网站的可访问性,但我不知道如何在页脚中标记社交媒体链接列表。这些链接指向我在 facecook、twitter 等上的帐户。我不想用 role="navigation" 标记这些链接,因
说现在是 6 点,我有一个 Timer 并在 10 点安排了一个 TimerTask。之后,System DateTime 被其他服务(例如 ntp)调整为 9 点钟。我仍然希望我的 TimerTas
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我就废话不多说了,大家还是直接看代码吧~ ? 1
Maven系列1 1.什么是Maven? Maven是一个项目管理工具,它包含了一个对象模型。一组标准集合,一个依赖管理系统。和用来运行定义在生命周期阶段中插件目标和逻辑。 核心功能 Mav
我是一名优秀的程序员,十分优秀!