0

リストからクリックした項目を ListView (および DB も) から削除する必要があります。

このタスクを実行するために、コンテキスト メニューは使用しませんが、カスタム アダプターを作成しました。このアダプター "row.xml" には、"削除" と "編集" の 2 つのボタンがあります。

では、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;
    }
}
4

3 に答える 3

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 に答える
1

アダプターを使用している場合は、リスト自体から項目を削除する必要はありません。poistionメソッドで受け取っているを使用して、DBからアイテムを削除する必要がgetViewありますonClick

DB からオブジェクトを削除しdataAdapter.notifyDataSetChanged();たら、アダプタで を呼び出して、新しいデータ セットでリストを更新します。

于 2013-03-15T13:56:06.530 に答える
0

リスナー(crudListeners)のonClickListenerで、データベースとアダプターのデータ(Listオブジェクト)から要素を削除するだけです。次に、adapter.notifyDataSetChanged()メソッドを呼び出すだけです。それが役に立てば幸い

于 2013-03-15T13:53:19.773 に答える