大佬教程收集整理的这篇文章主要介绍了android – 使用ListView,在适配器中删除总是删除最后一项,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
每个项目都有一个删除按钮.当有人点击该按钮时,会弹出一个对话框询问用户是否确实要删除该项目,点击是后,该项目将被删除.
我在内部验证了正确的项目被删除,但在视觉上只有列表中的最后一项被删除. Activity.recreate显示正确的项目已被删除,但我不希望在简单的删除和notifyDataSetChanged()可以做到这一点时调用recreate.
有人能指出我的代码可能出错的正确方向吗?
我活动中的源代码是:
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",int whichButton) { Sounds.buttonClick(); } })//setNegativeButton .create(); myQuitTingDialogBox.show(); } }
public class SS4ListItemFriendsAdapter extends BaseAdapter { Context context; List<SS4ListItemFriendsRow> rowItems; private Activity activity; SS4ListItemFriendsAdapter(Context context,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,position); } }); return convertView; } private void deleteFriendDialogBox(final String username,int whichButton) { Sounds.buttonClick(); } })//setNegativeButton .create(); myQuitTingDialogBox.show(); } }
以上是大佬教程为你收集整理的android – 使用ListView,在适配器中删除总是删除最后一项全部内容,希望文章能够帮你解决android – 使用ListView,在适配器中删除总是删除最后一项所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。