Android 单击“删除”按钮从列表视图中删除项目

Android 单击“删除”按钮从列表视图中删除项目,android,android-listview,delete-row,Android,Android Listview,Delete Row,我需要从ListView(以及DB)中删除从列表中单击的项目 要完成此任务,我不使用上下文菜单,但我构建了一个自定义适配器, 在这个适配器“row.xml”中有两个按钮“Delete”和“Edit” 那么,如何删除从de ListView和DB中选择的项目呢 …使用setTag()我将单击元素的ID设置为相对按钮,然后 如何从数据库中删除 这是我的适配器: package com.prendonota; import java.util.List; import android.conten

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

要完成此任务,我不使用上下文菜单,但我构建了一个自定义适配器, 在这个适配器“row.xml”中有两个按钮“Delete”和“Edit”

那么,如何删除从de ListView和DB中选择的项目呢

…使用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;
    }
}
package com.prendonota;
导入java.util.List;
导入android.content.Context;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.view.OnClickListener;
导入android.view.ViewGroup;
导入android.widget.ArrayAdapter;
导入android.widget.ImageButton;
导入android.widget.TextView;
导入android.widget.Toast;
导入com.prendonota.activeRecord.Nota;
public class listanotadapter扩展ArrayAdapter{
公证人;
公共OnClickListener crudListeners;
/**
*埃雷迪塔托酒店
*@param上下文
*@param textViewResourceId
*@param对象
*/
公共ListaNotaAdapter(上下文上下文、int textViewResourceId、列表对象){
超级(上下文、textViewResourceId、对象);
}       
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
视图行=空;
最终视图删除;
最终视图编辑;
//***这是一个非常重要的问题
//***国际体育竞赛协会
//***e il servizio che sièrichiesto“充气机布局图”
LayoutInflater充气器=(LayoutInflater)getContext().getSystemService(Context.LAYOUT\u充气器\u SERVICE);
//***这是一种竞争性的社会服务
//***nell'IdentificationAzione dell'xml数据用途
row=充气机。充气(R.layout.row,空);
//***每个版面都有一个完整的xml需求
//***我是里希亚莫,我是图诺的德洛格托项目协会的国际专业人员
TextView数据=(TextView)row.findViewById(R.id.item_数据);
TextView oggetto=(TextView)row.findViewById(R.id.item\u oggetto);
delete=(ImageButton)row.findViewById(R.id.button\u row\u delete);
编辑=(ImageButton)row.findViewById(R.id.button\u row\u edit);
//***prende l'oggetto nell在argomento中的数组“Nota[]objects”passato
//***波西佐涅自然指数
nota=获取项目(位置);
//****在精细的关联中,agli appositi oggetti“TextView”i rispettivi valori
data.setText(nota.get_dataInserimentoModifica());
oggetto.setText(nota.get_oggetto());
//***poi associo i tag ai Relative i pulsanti“删除”e“编辑”
delete.setTag(nota.get_id());
edit.setTag(nota.get_id());
//***听众的认可
delete.setOnClickListener(crudListeners);
edit.setOnClickListener(crudListeners);
//***我的听众都是些粗制滥造的听众
crudListeners=newonClickListener(){
@凌驾
公共void onClick(视图v){
int idnota=(整数)v.getTag();
StringBuilder msg=新的StringBuilder(“ID nota”)。追加(idnota);
如果(v.getId()==delete.getId()){
附加信息(“删除”);
}否则{
msg.append(“编辑”);
}
Toast.makeText(getContext(),msg,Toast.LENGTH_SHORT).show();
}
};      
//***torno la vista che finirádentro“setAdapter()”
返回行;
}
}

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

如果您正在使用适配器,则无需从列表中删除该项。您必须使用您在
getView
中通过
onClick
方法接收的
position
从数据库中删除该项

从数据库中删除对象后,调用
dataAdapter.notifyDataSetChanged()以使用新数据集更新列表。

1)保留对适配器中列表对象的字段引用,例如:

私有数组列表

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

final int positionFinal

3) 单击“删除”按钮时,请使用以下代码:

list.removeItem(positionFinal);
notifyDataSetChanged();
我希望这是足够清楚的,我不想复制和粘贴您的代码只是为了对其进行微小和难以看到的更改。 如果需要添加动画以删除列表项,并通过拖放对其进行排序,请查看此免费库:


祝你好运

嗨,谢谢你的邀请。我编写的代码删除了以您的方式选择的项,但是如何从类“public class listanotadapter extensed ArrayAdapter”中刷新de list呢?我知道“notifyDataSetChanged()”在这种情况下起作用……嗨,Perroloco,谢谢您的回答,所以在我的情况下,我将删除在自定义适配器类中定义了侦听器的项,因此,如果不是通过“this”,我不会直接引用“adapter”对象……但它不起作用。