0

我需要从 ListView(和 DB)中删除从列表中单击的项目。

为了完成这项任务,我不使用上下文菜单,但我构建了一个自定义适配器,在这个适配器“row.xml”中有两个按钮“删除”和“编辑”。

那么,我怎样才能删除从 de ListView 和数据库中选择的项目呢?

...使用 setTag() 我将单击元素的 ID 设置为相对按钮,然后呢?

如何从数据库中删除?

这是我的适配器:

package com.prendonota;

import java.util.List;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageButton;
import android.widget.TextView;
import android.widget.Toast;

import com.prendonota.activeRecord.Nota;

public class ListaNotaAdapter extends ArrayAdapter<Nota> {

    public Nota nota;
    public OnClickListener crudListeners;

    /**
     * Costruttore ereditato
     * @param context
     * @param textViewResourceId
     * @param objects
     */
    public ListaNotaAdapter(Context context, int textViewResourceId, List<Nota> objects) {
        super(context, textViewResourceId, objects);
    }       





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

        View row = null;
        final View delete;
        final View edit;

        //*** prima di tutto è necessario crearsi un oggetto inflater che
        //*** intrinsecamente associ il contesto attuale su cui si sta agendo
        //*** e il servizio che si è richiesto "layout_inflater"
        LayoutInflater inflater = (LayoutInflater)getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        //*** una volta che ho l'oggetto inflater che associa contesto+servizio posso procedere
        //*** nell'identificazione dell'xml da usare
        row = inflater.inflate(R.layout.row, null );

        //*** una volta che ho la vista relativa al contesto attuale e relativa all'xml desiderato per layout
        //*** mi richiamo i propri elementi interni a cui associare i dati dell'oggetto item di turno
        TextView data       = (TextView)row.findViewById(R.id.item_data);
        TextView oggetto    = (TextView)row.findViewById(R.id.item_oggetto);
        delete  = (ImageButton)row.findViewById(R.id.button_row_delete);
        edit    = (ImageButton)row.findViewById(R.id.button_row_edit);

        //*** prende l'oggetto nell'array "Nota[] objects" passato in argomento
        //*** dato il proprio indice di posizione
        nota = getItem(position);

        //**** in fine associo agli appositi oggetti "TextView" i rispettivi valori
        data.setText(nota.get_dataInserimentoModifica());
        oggetto.setText(nota.get_oggetto());

        //*** poi associo i tag ai relativi pulsanti "Delete" e "Edit"
        delete.setTag(nota.get_id());
        edit.setTag(nota.get_id());

        //*** assegnazione dei listeners ai rispettivi pulsanti
        delete.setOnClickListener(crudListeners);
        edit.setOnClickListener(crudListeners);

        //*** inizializzo la variabile crudListeners che gestisce i listeners sui pulsanti
        crudListeners = new OnClickListener() {
            @Override
            public void onClick(View v) {
                int idnota = (Integer)v.getTag();
                StringBuilder msg = new StringBuilder("ID nota ").append(idnota);
                if(v.getId()==delete.getId()){
                    msg.append(" DELETE");
                }else{
                    msg.append(" EDIT");
                }
                Toast.makeText(getContext(), msg, Toast.LENGTH_SHORT).show();
            }
        };      

        //*** torno la vista che finirà dentro "setAdapter()"
        return row;
    }
}
4

3 回答 3

1

如果您使用的是适配器,则无需从它自己的列表中删除该项目。poistion您必须使用您getView在方法中接收的内容从数据库中删除该项目onClick

当您从数据库中删除对象时,调用dataAdapter.notifyDataSetChanged();适配器上的 以使用新数据集更新列表。

于 2013-03-15T13:56:06.530 回答
1

1) 在适配器中保留对 List 对象的字段引用 - 例如:

private ArrayList<Nota>list

2) 在 getView() 方法中创建对位置的最终 int 引用,例如

final int positionFinal

3)当您单击删除按钮时,使用以下代码:

list.removeItem(positionFinal);
notifyDataSetChanged();

我希望这足够清楚,不想复制和粘贴您的代码只是为了对其进行细微且难以看到的更改。如果您需要添加动画以删除列表项以及通过拖放对它们进行排序的能力,请查看这个免费库:DragSortListView

祝你好运!

于 2013-03-15T13:59:55.697 回答
0

在您的侦听器(crudListeners)的 onClickListener 中,只需从数据库和适配器的数据中删除元素(它将是您的 List 对象)。然后只需调用 adapter.notifyDataSetChanged() 方法。希望能帮助到你

于 2013-03-15T13:53:19.773 回答