Android   发布时间:2022-04-28  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了android – 使用ListView,在适配器中删除总是删除最后一项大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我的Activity中有一个带有自定义适配器的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();
 }    

}
@H_616_35@

大佬总结

以上是大佬教程为你收集整理的android – 使用ListView,在适配器中删除总是删除最后一项全部内容,希望文章能够帮你解决android – 使用ListView,在适配器中删除总是删除最后一项所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。