1

を使用してリスト内の項目を簡単に削除する方法はありonLongPressますか?

使用したいOnGestureListener-リスト内のアイテムonLongPressをリッスンしlongpressて削除し、それに応じてアダプターで更新します。

私の問題は、カスタムアダプターを使用するonlistItemclickと、onItemLongClick競合とロングクリックがトリガーされないことです!

    public void onLongPress(MotionEvent e) {
    // TODO Auto-generated method stub
    Toast.makeText(listmodified.this, "A long click detected", Toast.LENGTH_SHORT).show();
    if (e.getAction()==MotionEvent.ACTION_DOWN) 
    { 

    OnItemLongClickListener itemDelListener = new OnItemLongClickListener(){

            //@Override
            public boolean onItemLongClick(AdapterView<?> parent, View arg1,
                    int position, long arg3) {
                // TODO Auto-generated method stub
                itemSelected=parent.getItemAtPosition(position).toString();

                adapter.remove(itemSelected);
                myList.remove(position);
                adapter.notifyDataSetChanged();
                Toast.makeText(listmodified.this, "IN LONGCLICK", Toast.LENGTH_SHORT).show();
                return false;
            }};


        longClickedItem = -1; 

    } 
4

3 に答える 3

1

ここで Handler の概念を使用します。

Step1定数を宣言する

private static final byte UPDATE_LIST = 100;

Step2ボタンの onclick ハンドラを呼び出す

 OnItemLongClickListener itemDelListener = new OnItemLongClickListener(){

        //@Override
        public boolean onItemLongClick(AdapterView<?> parent, View arg1,
                int position, long arg3) {
            // TODO Auto-generated method stub
            itemSelected=parent.getItemAtPosition(position).toString();

            adapter.remove(itemSelected);


                    Message msg = new Message();
                msg.what = UPDATE_LIST;
                msg.arg1 = position
                updateListHandler.sendMessage(msg);
            Toast.makeText(listmodified.this, "IN LONGCLICK", Toast.LENGTH_SHORT).show();
            return false;
        }};

Step3ハンドラを定義する

private Handler updateListHandler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            switch (msg.what) {
            case UPDATE_LIST:
            int position = msg.arg1;
                list.remove(position);
                adapter.notifyDataSetChanged();
                break;

            }
            ;
        };
    };

リストビューのUIを更新する方法で私の応答を参照してください

于 2011-06-17T13:49:58.187 に答える
0

View.setOnClickListener()を使用して、OnClickListenerをビューに登録する必要があります。

編集:これの平凡な例はこのリンクで見つけることができます:

http://www.androidsnippets.com/clickable-listview-items

アクティビティが表示されている場所までページを下に移動し、そこを確認します。彼らはすべてを行うために独自のクラスを実装しますが、スーパークラス(カスタムクラスの一部ではない)からのメソッドを使用しますこれがあなたの問題を確実に解決することを約束することはできませんが、正しい方向への一歩となるはずです。

于 2011-06-17T13:48:07.357 に答える
0

これを試して:

listView.setOnItemLongClickListener(new OnItemLongClickListener(){
        public boolean onItemLongClick(AdapterView<?> adapterView, View view, int position, long id) {
            listView.removeViewAt(position);
            return false;
        }
    });
于 2011-06-17T13:53:38.037 に答える