繁体   English   中英

ListView从自定义BaseAdapter中删除项目

[英]ListView remove item from custom BaseAdapter

我有以下BaseAdapter类:

public class ListViewAdapter extends BaseAdapter{
String [] result, players;
Context context;
View rowView;
int [] imageId;
Holder holder;
private static LayoutInflater inflater=null;
public ListViewAdapter(MainActivity.PageFragment mainActivity, String[] prgmNameList, String[] players, int[] prgmImages) {
    result=prgmNameList;
    this.players=players;
    context=mainActivity.getContext();
    imageId=prgmImages;
    inflater = ( LayoutInflater )context.
            getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public int getCount() {
    return result.length;
}

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

@Override
public long getItemId(int position) {
    return position;
}

public class Holder
{
    TextView title, players;
    ImageView img;
}
@Override
public View getView(final int position, View convertView, final ViewGroup parent) {
    // TODO Auto-generated method stub
    holder=new Holder();
    rowView = inflater.inflate(R.layout.server_layout, null);
    holder.title=(TextView) rowView.findViewById(R.id.textView1);
    holder.players=(TextView) rowView.findViewById(R.id.textView5);
    holder.img=(ImageView) rowView.findViewById(R.id.imageView7);
    holder.title.setText(result[position]);
    holder.players.setText(players[position]);
    holder.img.setImageResource(imageId[position]);
    rowView.setOnLongClickListener(new View.OnLongClickListener() {
        @Override
        public boolean onLongClick(final View v) {
            new AlertDialog.Builder(context)
                    .setIcon(android.R.drawable.ic_dialog_alert)
                    .setTitle("Remove")
                    .setMessage("Are you sure you want to remove this server?")
                    .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            Toast.makeText(context, "You LongClicked " + result[position], Toast.LENGTH_LONG).show();
                            //REMOVE ITEM
                            notifyDataSetChanged();
                        }
                    })
                    .setNegativeButton("No", null)
                    .show();
            return false;
        }
    });
    return rowView;
 }
}

以及以下onCreate()

            ListView servers =(ListView) view.findViewById(R.id.list_view);
            BaseAdapter e = new ListViewAdapter(this,prgmNameList,players,prgmImages);
            servers.setAdapter(e);

我的问题是,我如何才能删除onClick方法中的单击项。 我试图从ListViewrowView=null;删除它rowView=null; 但是那些没有用。 提前致谢

在ListViewAdapter中定义一个称为removeRow的方法。

public void removeRow(int position) {
    // Remove the element from the results array here.
    notifyDataSetChanged();
}

一些建议:如果可以,请使用RecyclerView。 该框架具有处理删除动画等的更好方法。请在getView()中使用convertView。 不要为每次调用getView都增加一个新视图。 这将使您的listView更快。

如果removeViewAt()给您一个错误,则只需获取单击的项目的位置并将其从您的arraylist中删除即可。 然后说出adapter.notifyDataSetChanged();视图将自行更新。

将项目从适配器内的列表中删除后,请尝试在适配器中执行以下操作:

this.notifyItemRemoved(position);

当position是已移除项目的位置时。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM