gpt4 book ai didi

android - 使用 ListView,在 Adapter 中删除总是删除最后一项

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:25:07 24 4
gpt4 key购买 nike

我的 Activity 中有一个带有自定义适配器的 ListView。

每个项目上都有一个删除按钮。当有人点击该按钮时,会弹出一个对话框,询问用户是否真的要删除该项目,点击是后,该项目就会被删除。

我验证了在内部删除了正确的项目,但在视觉上只有列表中的最后一项被删除。 Activity.recreate 显示正确的项目已被删除,但我不想在简单的删除和 notifyDataSetChanged() 可以解决问题时调用 recreate。

有人可以指出我的代码可能有什么问题的正确方向吗?

我 Activity 中的源代码是:

        ListView mylistview = (ListView) findViewById(R.id.listFriends);
SS4ListItemFriendsAdapter adapter = new SS4ListItemFriendsAdapter(getApplicationContext(), SS4NewGameActivity.this, SS4ListItemFriendsRows);
mylistview.setAdapter(adapter);

这是我的适配器:

public class SS4ListItemFriendsAdapter extends BaseAdapter {

Context context;
List<SS4ListItemFriendsRow> rowItems;
private Activity activity;


SS4ListItemFriendsAdapter(Context context, Activity act, List<SS4ListItemFriendsRow> rowItems) {

this.context = context;
this.rowItems = rowItems;
this.activity = act;

}

@Override
public int getCount() {
return rowItems.size();
}

@Override
public Object getItem(int position) {
return rowItems.get(position);
}

@Override
public long getItemId(int position) {
return rowItems.indexOf(getItem(position));
}

/* private view holder class */
private class ViewHolder {
ImageView avatar;
ImageView delete;
TextView username;
}

@Override
public View getView(final int position, View convertView, ViewGroup parent) {

ViewHolder holder = null;

LayoutInflater mInflater = (LayoutInflater) context
.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
if (convertView == null) {
convertView = mInflater.inflate(R.layout.ss4_list_item_friends, null);
holder = new ViewHolder();

holder.username = (TextView) convertView
.findViewById(R.id.username);
holder.avatar = (ImageView) convertView
.findViewById(R.id.avatar);

holder.delete = (ImageView) convertView
.findViewById(R.id.delete);

if (getCount() > 0) {
if (((SS4ListItemFriendsRow) getItem(0)).getDelete() == 0) {
holder.delete.setVisibility(ImageView.INVISIBLE);
}
}

final SS4ListItemFriendsRow row_pos = rowItems.get(position);

holder.avatar.setImageResource(row_pos.getAvatar());
holder.username.setText(row_pos.getUsername());

holder.delete.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Sounds.buttonClick();
Log.d(App.TAG, row_pos.getUsername());

deleteFriendDialogBox(row_pos.getUsername(), position);
}
});

convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}

return convertView;
}

private void deleteFriendDialogBox(final String username, final int position)
{

//String title = "deleteFriend?";
String msg = context.getResources().getString(R.string.ss4_delete_friend);

AlertDialog myQuittingDialogBox = new AlertDialog.Builder(activity)

.setCancelable(false)
.setTitle("")
.setMessage(msg)


.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {

rowItems.remove(position);
Log.d(App.TAG,"position: "+String.valueOf(position));

notifyDataSetChanged();
SS4NewGameActivity.getListViewSize(mylistview);

//activity.recreate();
try {
int showMsgBox = (Integer) friend.getInt("showMsgBox");
if (showMsgBox == 1) {
String msg = (String) friend.getString("msg");
Toast.makeText(context, msg,Toast.LENGTH_LONG).show();
}
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

Sounds.buttonClick();

}
})//setPositiveButton

.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
Sounds.buttonClick();


}
})//setNegativeButton

.create();

myQuittingDialogBox.show();
}

}

最佳答案

更新的代码:- 对象上的所有设置都需要在外部.. 在此处检查更新的代码。

public class SS4ListItemFriendsAdapter extends BaseAdapter {

Context context;
List<SS4ListItemFriendsRow> rowItems;
private Activity activity;


SS4ListItemFriendsAdapter(Context context, Activity act, List<SS4ListItemFriendsRow> rowItems) {

this.context = context;
this.rowItems = rowItems;
this.activity = act;

}

@Override
public int getCount() {
return rowItems.size();
}

@Override
public Object getItem(int position) {
return rowItems.get(position);
}

@Override
public long getItemId(int position) {
return rowItems.indexOf(getItem(position));
}

/* private view holder class */
private class ViewHolder {
ImageView avatar;
ImageView delete;
TextView username;
}

@Override
public View getView(final int position, View convertView, ViewGroup parent) {

ViewHolder holder = null;

LayoutInflater mInflater = (LayoutInflater) context
.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
if (convertView == null) {
convertView = mInflater.inflate(R.layout.ss4_list_item_friends, null);
holder = new ViewHolder();

holder.username = (TextView) convertView
.findViewById(R.id.username);
holder.avatar = (ImageView) convertView
.findViewById(R.id.avatar);

holder.delete = (ImageView) convertView
.findViewById(R.id.delete);



convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}

if (getCount() > 0) {
if (((SS4ListItemFriendsRow) getItem(0)).getDelete() == 0) {
holder.delete.setVisibility(ImageView.INVISIBLE);
}
}

final SS4ListItemFriendsRow row_pos = rowItems.get(position);

holder.avatar.setImageResource(row_pos.getAvatar());
holder.username.setText(row_pos.getUsername());

holder.delete.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Sounds.buttonClick();
Log.d(App.TAG, row_pos.getUsername());

deleteFriendDialogBox(row_pos.getUsername(), position);
}
});

return convertView;
}

private void deleteFriendDialogBox(final String username, final int position)
{

//String title = "deleteFriend?";
String msg = context.getResources().getString(R.string.ss4_delete_friend);

AlertDialog myQuittingDialogBox = new AlertDialog.Builder(activity)

.setCancelable(false)
.setTitle("")
.setMessage(msg)


.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {

rowItems.remove(position);
Log.d(App.TAG,"position: "+String.valueOf(position));

notifyDataSetChanged();
SS4NewGameActivity.getListViewSize(mylistview);

//activity.recreate();
try {
int showMsgBox = (Integer) friend.getInt("showMsgBox");
if (showMsgBox == 1) {
String msg = (String) friend.getString("msg");
Toast.makeText(context, msg,Toast.LENGTH_LONG).show();
}
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

Sounds.buttonClick();

}
})//setPositiveButton

.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
Sounds.buttonClick();


}
})//setNegativeButton

.create();

myQuittingDialogBox.show();
}

}

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

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