删除项目后如何更新列表视图?
Posted
技术标签:
【中文标题】删除项目后如何更新列表视图?【英文标题】:How do I update the listview after I delete an item? 【发布时间】:2019-08-28 01:42:05 【问题描述】:每次我从列表视图中的 firebase 中删除数据时,我都会可视化数据拆分并且不正确。 我已经有了适配器,但我无法处理它。 在这段代码中,我看到了 firebase 上的列表视图,当我单击数据项时,我询问用户是否要删除数据。 我该怎么办?
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
firebaseAuth = FirebaseAuth.getInstance();
firebaseUser = firebaseAuth.getCurrentUser();
setContentView(R.layout.activity_elenco);
storage = FirebaseStorage.getInstance();
//storageReference = storage.getReference();
listView = findViewById(R.id.listView);
databaseReference = FirebaseDatabase.getInstance().getReference("Users");
usersList = new ArrayList<>();
@Override
protected void onStart()
super.onStart();
Query query = databaseReference.orderByChild("id").equalTo(firebaseUser.getUid());
query.addValueEventListener(new ValueEventListener()
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot)
for(DataSnapshot usersSnapshot:dataSnapshot.getChildren())
Users users = usersSnapshot.getValue(Users.class);
usersList.add(users);
keyList.add(usersSnapshot.getKey());
UserAdapter userAdapter = new UserAdapter(Elenco.this,usersList);
listView.setAdapter(userAdapter);
@Override
public void onCancelled(@NonNull DatabaseError databaseError)
);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener()
final CharSequence[] items = "SI","NO";
AlertDialog.Builder builder = new AlertDialog.Builder(Elenco.this);
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id)
builder.setTitle("Vuoi eliminare la segnalazione?");
builder.setItems(items, new DialogInterface.OnClickListener()
@Override
public void onClick(DialogInterface dialog, int i)
if(items[i]=="SI")
StorageReference photoRef = storage.getReferenceFromUrl("gs://tesi-779f2.appspot.com/"+keyList.get(position));
photoRef.delete();
usersList.remove(position);
databaseReference.getRoot().child("Users").child(keyList.get(position)).removeValue();
keyList.remove(position);
startActivity(new Intent(Elenco.this,Profilo.class));
else if(items[i]=="NO")
dialog.dismiss();
);
builder.show();
);
【问题讨论】:
【参考方案1】:用户适配器用户适配器。通过 onCreate 方法将此变量设为全局变量。
在onItemClick事件之后
keyList.remove(position);
startActivity(new Intent(Elenco.this,Profilo.class));
写在下面一行。
userAdapter.notifyDataSetChanged();
这将更新您的列表视图。
【讨论】:
给出此错误:java.lang.RuntimeException:无法实例化活动 ComponentInfocom.example.registrazioneapp/com.example.registrazioneapp.Elenco:java.lang.IllegalStateException:系统服务不可用于onCreate() 之前的活动 你能在这里发布你的完整代码吗?所以我会帮助你 我求解器!把 usersList.clear();在 onDataChange 方法中。【参考方案2】:像这样在适配器类中定义一个方法
public void refresh(List<Users> userList)
this.userList=userList;
notifyDataSetChanged();
并在您进行更改时调用此方法。
【讨论】:
【参考方案3】:您需要通过以下方式从列表视图的适配器中删除数据
adapter.remove(adapter.getItem(position));
然后在适配器上调用notifyDataSetChanged()
。
【讨论】:
请编辑帖子并告诉我在哪里输入代码,否则我不明白。 检查更改 不起作用。我把 notifyDataSetChanged();但给我红色错误 我求解器!把 usersList.clear();在 onDataChange 方法中。以上是关于删除项目后如何更新列表视图?的主要内容,如果未能解决你的问题,请参考以下文章
单击 CursorAdapter 中的按钮时如何在列表视图项目行中执行更新和删除操作