3

私のListViewItemsには削除ボタンがあります。これらのボタンのクリックイベントから、データベースからIDを介してアイテムを削除する前に、確認ダイアログを表示したいと思います。IDはアイテムのViewHolderに保存されます。

AlertDialogのクリックハンドラーからアイテムのViewHolderにアクセスするにはどうすればよいですか?関連するコードは次のとおりです。コンパイラは、onClick(DialogInterfaceダイアログ、int whichButton)内の「V」をチョークします。

ボタンのタグにIDを保存することはできますが、それは厄介です。

最小のAPIレベル8をターゲットにしていますが、より高いAPIレベルでこれを解決できるかどうか教えてください。これは私の最初のAndroidプログラムなので、明らかな解決策があるかもしれません。

private static class MyAdapter extends CursorAdapter {
//.....
    @Override
    public View newView(Context context, Cursor cursor, ViewGroup parent) {
        View view = View.inflate(context, R.layout.my_detail, null);
        MyViewHolder holder = new MyViewHolder();
        holder.deleteButton = (Button) view.findViewById(R.id.deleteButton);
        holder.deleteButton.setOnClickListener(deleteButtonClickListener);
        holder.editButton = (Button) view.findViewById(R.id.editButton);
        holder.editButton.setOnClickListener(editButtonClickListener);
        holder.nameTextView = (TextView) view
                .findViewById(R.id.nameTextView);
        holder.itemId = cursor.getLong(cursor
                .getColumnIndex(MyData.ID_COLUMN));
        view.setTag(holder);
        return view;
    } // newView()
//.....
    private OnClickListener deleteButtonClickListener = new OnClickListener() {

        public void onClick(View v) {
            new AlertDialog.Builder(_context)
                    .setTitle("Delete?")
                    .setMessage("Delete item?")
                    .setIcon(android.R.drawable.ic_dialog_alert)
                    .setPositiveButton(android.R.string.yes,
                            new DialogInterface.OnClickListener() {
                                public void onClick(DialogInterface dialog,
                                        int whichButton) {
                                    MyViewHolder holder = (MyViewHolder) ((View) v
                                            .getParent()).getTag();
                                    long itemId = holder.itemId;
                                    _MyData.deleteItem(itemId);
                                }
                            }).setNegativeButton(android.R.string.no, null)
                    .show();
        } // onClick()

    }; // deleteButtonClickListener
//.....
}
4

3 に答える 3

1

あなたのコードは実際にはかなり良く見えます、必要な唯一の変更は次のようvに宣言する必要があることfinalです:

private OnClickListener deleteButtonClickListener = new OnClickListener()
{
    public void onClick(final View v) { }
}

この理由は、Javaがクロージャを実装する方法によるものです。の実装が変数にアクセスできるようにするv必要があります。finalDialogInterface.OnClickListenersetPositiveButton()

于 2012-11-12T17:16:01.580 に答える
0

ダイアログボックスでアイテムIDを取得できるように、削除ボタンでアイテムIDにタグを付けます

例えば

holder.deleteButton.setTag(cursor.getLong(cursor
                .getColumnIndex(MyData.ID_COLUMN)));

ダイアログボックスで取得します

long itemId = v.getTag();
于 2012-11-12T17:22:04.357 に答える
0
first implement the onclickevtn

private static class MyAdapter extends CursorAdapte mplements android.view.View.OnClickListener

then set the event for particular 

     holder.editButton.setOnClickListener(this);

then override the class function

    @Override
    public void onClick(View v) {
        if(R.id.editButton==v.getId()){
           ....do something
        }else
}


this will work after struggling i got this way
于 2014-08-20T12:17:54.010 に答える