gpt4 book ai didi

android - ListView 总是删除最后一项

转载 作者:行者123 更新时间:2023-11-29 19:04:46 24 4
gpt4 key购买 nike

我的 ListView 项目包含一个删除按钮,我在我的适配器中设置它以从数据库中删除该项目。现在一旦完成,我如何刷新包含 listView 的 fragment 以删除该项目?相关代码如下:

在适配器中删除项目函数:

holder.actionIndicator.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {

AlertDialog alertDialog = new AlertDialog.Builder(mContext).create();
alertDialog.setTitle("Delete item");
alertDialog.setButton(AlertDialog.BUTTON_POSITIVE, "yes",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {

FirebaseMethods firebaseMethods = new FirebaseMethods(mContext);
firebaseMethods.deleteHashtagFromDatabase(title);

dialog.dismiss();
}
});
alertDialog.setButton(AlertDialog.BUTTON_NEGATIVE, "no",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});


alertDialog.show();


}
});

Listview 在我的 fragment 中是这样设置的:

private void setupListView(){

Log.d(TAG, "setupListView: setting up list");
final ArrayList<HashTag> hashTags = new ArrayList<>();
myRef = FirebaseDatabase.getInstance().getReference();
Query query = myRef.child(getString(R.string.dbname_user_hashtags))
.child(FirebaseAuth.getInstance().getCurrentUser().getUid());
query.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot singleSnapshot : dataSnapshot.getChildren()){


if(singleSnapshot != null){
hashTags.add(0, singleSnapshot.getValue(HashTag.class));
}

}

HashTagListViewAdapter adapter = new HashTagListViewAdapter(getActivity(), R.layout.layout_list_itemview, hashTags);
hashtagListView.setAdapter(adapter);



}

@Override
public void onCancelled(DatabaseError databaseError) {

}
});

谢谢!

更新:

现在我已经将子项上的 OnClickListener 从适配器传递到 fragment ListView OnItemClickListener,如下所示:

更新的适配器

holder.actionIndicator.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {

((ListView) parent).performItemClick(v, position, 0);



}
});

更新 fragment

hashtagListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, final int position, long id) {


long viewId = view.getId();
Log.d(TAG, "onItemClick: viewId is " + viewId);
Log.d(TAG, "onItemClick: position is " + position);

final HashTagListViewAdapter adapter = new HashTagListViewAdapter(getActivity(), R.layout.layout_list_itemview, hashTags);
final HashTag hashTag = hashTags.get(position);
final String title = hashTag.getTitle();
Log.d(TAG, "onItemClick: title is " + title);


if(viewId == R.id.deleteFromListBtn){

AlertDialog alertDialog = new AlertDialog.Builder(getActivity()).create();
alertDialog.setTitle("delete item");
alertDialog.setButton(AlertDialog.BUTTON_POSITIVE, "yes",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {

FirebaseMethods firebaseMethods = new FirebaseMethods(getActivity());
firebaseMethods.deleteHashtagFromDatabase(title);
Log.d(TAG, "onClick: title is " + title);

// NEW PROBLEM HERE!
adapter.remove(hashTag);
Log.d(TAG, "onClick: removed hashtag is " + hashTag);
adapter.notifyDataSetChanged();

Log.d(TAG, "onItemClick: item removed from list.");

dialog.dismiss();
}
});
alertDialog.setButton(AlertDialog.BUTTON_NEGATIVE, "no",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});


alertDialog.show();


}
}
});

但现在的问题是当我删除项目时,listView 总是删除 View 中的最后一个项目。但是,正确的项目已从数据库中删除,并且根据日志,此代码 adapter.remove(hashTag) 确实获取了我打算删除的正确项目。

最佳答案

首先,您不应该刷新整个 Fragment。坏习惯

要刷新您的 ListView

  1. 首先从 ArrayList 中删除项目(名为“hashTags”)。
  2. 只需调用 YOUR_ADAPTER.notifyDataSetChanged()

notifyDataSetChanged() 会自动从 ListView 中删除项目。

Use of notifyDataSetChanged()

关于android - ListView 总是删除最后一项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47707085/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com