1

onItemLongClick メソッドを使用してリストビュー項目を削除する機能は既にありましたが、これを行うにはフローティング コンテキスト メニューを使用したいと思います。

以下は、フローティングコンテキストメニュー用に現在持っているコードです。私はそれをセットアップするのに役立つドキュメントに従い、次に私がやっていることと同様の例を検索しようとしましたが、適切なものを見つけることができませんでした.

    @Override
    public void onCreateContextMenu(ContextMenu menu, View v,
                                    ContextMenu.ContextMenuInfo menuInfo) {
        super.onCreateContextMenu(menu, v, menuInfo);
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.payments_context, menu);
    }

    @Override
    public boolean onContextItemSelected(MenuItem item) {
        AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
        switch (item.getItemId()) {
            case R.id.edit:

                return true;
            case R.id.delete:

                return true;
            default:
                return super.onContextItemSelected(item);
        }
    }

これは、フローティング コンテキスト メニューに切り替える前に、リストビュー内の項目を削除する必要があったコードです。

public boolean onItemLongClick (AdapterView<?> parent, View view, int position, long id)
        {
            String temp = paymentTitle.get(position).toString();
            paymentTitle.remove(position);
            paymentDate.remove(position);
            reminderDate.remove(position);
            reminderTime.remove(position);
            paymentVal.remove(position);

            mDatabase = new MOSDatabase(this);

            SQLiteDatabase readableDB = mDatabase.getWritableDatabase();
            readableDB.delete("PaymentTable", "PTITLE=?",
                    new String[]{temp});

            aa.notifyDataSetChanged();

            return false;
        }

このフローティング コンテキスト メニューを機能させる方法について誰かがアドバイスしてくれたら、本当に感謝しています。編集方法はまだ完了していません。これは、これが完了した後に行う必要があります。

4

1 に答える 1

5

私の理解が正しければ、次のコードを使用して、クリックした位置の ListView 内のアイテムのインデックスを取得できます。

AdapterContextMenuInfo info = (AdapterContextMenuInfo) menuInfo;
int position = info.position;

を使用すると、ほとんどそのままpositionのコードを再利用できます。onItemLongClick

@Override
public boolean onContextItemSelected(MenuItem item) {
    AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
    int position = info.position;
    switch (item.getItemId()) {
        case R.id.edit:

            return true;
        case R.id.delete: {
            String temp = paymentTitle.get(position).toString();
            paymentTitle.remove(position);
            paymentDate.remove(position);
            reminderDate.remove(position);
            reminderTime.remove(position);
            paymentVal.remove(position);

            mDatabase = new MOSDatabase(this);

            SQLiteDatabase readableDB = mDatabase.getWritableDatabase();
            readableDB.delete("PaymentTable", "PTITLE=?",
                    new String[]{temp});

            aa.notifyDataSetChanged();
            }
            return true;
        default:
            return super.onContextItemSelected(item);
    }
}

この質問に対する答えを見たいと思うかもしれません。

于 2013-08-21T18:36:33.067 に答える