Как удалить выбранный элемент из listview?

#java #android #listview

#java #Android #listview

Вопрос:

ИЗВИНИТЕ ЗА ЭТУ ПУТАНИЦУ: ОБНОВЛЕННЫЙ ВОПРОС: я пытаюсь удалить элемент списка из listview. при нажатии на элемент отображается alertdialog. Если я нажму OK, то выбранный элемент должен быть удален из listview. Мой код приведен ниже:

 case R.id.lvinc:
       AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setTitle("Delete Event ");

        builder.setMessage("Delete this Event ?");
        builder.setPositiveButton("Ok, Delete",
                new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {
                  try
                  {
                     ???? //What code to delete the selected list item?




                  }catch(Exception e)
                  {
                      e.printStackTrace();
                  }
         }
                });

        AlertDialog alert = builder.create();
        alert.show();
        displaylist();
        break;
  

Любая помощь действительно ценится и заранее благодарна…

Комментарии:

1. Каков ваш актуальный вопрос? Заголовок вопроса и описание отличаются..

2. Извините за эту путаницу. Я обновил заголовок вопроса

3. С какой проблемой вы столкнулись при удалении элемента…

4. Я не знаю, как удалить элемент списка.

Ответ №1:

Я попытался решить эту проблему и получил одно решение, пожалуйста, ознакомьтесь с приведенным ниже кодом:

listview.java

 public class listview extends Activity implements OnItemClickListener{

     ListView list;
     ListAdapter adapter;
     ArrayList<String> nameArray;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);//xml should have an ListView element
        nameArray   =   new  ArrayList<String>();
        nameArray.add("Item1");
        nameArray.add("Item2");
        nameArray.add("Item3");
        nameArray.add("Item4");
        nameArray.add("Item5");
        list = (ListView) findViewById(R.id.listView);
        list.setOnItemClickListener(listview.this);
        adapter=new ListAdapter(listview.this, nameArray);
        list.setAdapter(adapter);
    }
    @Override
    public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
        showDialog(arg2);
    }
    @Override
    protected Dialog onCreateDialog(final int id) {
        Builder builder = new AlertDialog.Builder(this);
        builder.setMessage("Delete Event")
            .setCancelable(true)
            .setPositiveButton("Ok, Delete",
                    new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        nameArray.remove(id);
                        adapter=new ListAdapter(listview.this, nameArray);
                        list.setAdapter(adapter);
                    }
                    })
            .setNegativeButton("No",
                    new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {

                    }
                    });
        AlertDialog dialog = builder.create();
        dialog.show();
        return super.onCreateDialog(id);
    }
}
  

// Класс адаптера

ListAdapter.java

 public class ListAdapter extends BaseAdapter {

    private Activity activity;
    private ArrayList<String> name;
    private static LayoutInflater inflater=null;

    public ListAdapter(Activity a, ArrayList<String> nameArray) {
        activity = a;
        name    =   nameArray;
        inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    }

    public int getCount() {
        return name.size();
    }

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

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

    public static class ViewHolder{
        public TextView text;
    }

    public View getView(int position, View convertView, ViewGroup parent) {
        View vi=convertView;
        ViewHolder holder;
        if(convertView==null){
            vi = inflater.inflate(R.layout.list_item, null);
            holder=new ViewHolder();
            holder.text=(TextView)vi.findViewById(R.id.title);
            vi.setTag(holder);
        }
        else
            holder=(ViewHolder)vi.getTag();
        holder.text.setText(name.get(position));
        return vi;
    }
}
  

Комментарии:

1. Я думаю, notifyDataChanged все же лучше, чем воссоздание нового адаптера 😉

Ответ №2:

Я не знаю, какие данные вы используете.

Я представляю курсор, базу данных или список, не стесняйтесь сообщать нам, так будет легче помочь.

Этот пример предназначен для списка:

 protected void onListItemClick(View v, int pos, long id) {
    Log.i(TAG, "onListItemClick id="   id);
    //Display your Dialog
    (...)
    builder.setPositiveButton("Ok, Delete",
            new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int id) {
            myList.remove(pos);
            myAdapter.notifyDataChanged();
     }
            });

}
  

Комментарии:

1. Я использую OnItemClickListener, который был реализован с помощью Activity

2. да, но вам нужно добавить эти 2 строки: myList.remove(pos); MyAdapter.notifyDataChanged();

Ответ №3:

Возможно, у вас есть какой-то адаптер, который вы передаете с какими-то данными.

Удалите элемент из этого списка и передайте notifyDataChanged в ListView.

И, наконец: dialog.dismiss();

Ответ №4:

 itemLayout.setOnClickListener(new OnClickListener() {
 @Override
 public void onClick(View arg0) {
 indexClick = position;
}
}
if ((indexClick) == (position)) {
  itemLayout.setBackgroundResource(R.drawable.tab_select);
}
  

в противном случае поместите изображение tab_unselected.