4

List と Arrayadapter を使用して文字列を Listview に配置しました。選択したアイテムを削除したいと思います。次のコードを試しましたが、うまくいきません。どうすればこれを修正できますか?

これが私のコードです:

TextView t1;
String[] temp;
mylist = (ListView) findViewById(R.id.list);
final List<String> wordList = Arrays.asList(temp);
adapter = new ArrayAdapter<String>(this,
                                   android.R.layout.simple_list_item_multiple_choice, 
                                   wordList);
delete.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View arg0) {
       int index = mylist.getSelectedItemPosition();
       int count=mylist.getCount();
       for(int i=0;i<=count;i++) {
           if (index >= 0) {
               t1.setText(wordList.remove(index));
           }
           adapter.notifyDataSetChanged();
       } 
   }
});

ソースコードは次のとおりです。

    public class Edit extends Activity {
        SharedPreferences sharedpref;
        ListView mylist;
        String[] temp;
        String name, 
        ArrayAdapter<String> adapter;
        Button save, delete, cancel;
        TextView t1;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            // TODO Auto-generated method stub
            super.onCreate(savedInstanceState);
            setContentView(R.layout.edit);
            mylist = (ListView) findViewById(R.id.list);
            cancel = (Button) findViewById(R.id.cancel1);
            save = (Button) findViewById(R.id.save1);
            delete = (Button) findViewById(R.id.delete1);
            t1=(TextView)findViewById(R.id.textView1);
            sharedpref = PreferenceManager
                    .getDefaultSharedPreferences(getApplicationContext());
            name = sharedpref.getString("Visible_selected", "");

            String delimiter = "\n";
            temp = name.split(delimiter);

            mylist.setItemsCanFocus(true);
            mylist.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
             final List<String> wordList = Arrays.asList(temp);  

            adapter = new ArrayAdapter<String>(this,
                    android.R.layout.simple_list_item_multiple_choice, wordList);
            mylist.setAdapter(adapter);
            save.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View arg0) {
                    // TODO Auto-generated method stub

                }
            });

            delete.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View arg0) {
                    mylist.setOnItemClickListener(new OnItemClickListener() {
                        private String getSelectedItemOfList;
                        @Override
                        public void onItemClick(AdapterView<?> arg0, View arg1,
                                int arg2, long arg3) {
                            // TODO Auto-generated method stub
                             getSelectedItemOfList = sortedList.get(arg2).getStr_movieParam();


                }
            });

            cancel.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub

                }
            });

        }

    }

これが私の更新コードです:

enter code here

delete.setOnClickListener(新しいOnClickListener() {

            @Override
            public void onClick(View arg0) {
                // TODO Auto-generated method stub
         adapter.remove(getSelectedItemOfList);
         adapter.notifyDataSetChanged();
            }
        });
        mylist.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                    long arg3) {
                // TODO Auto-generated method stub
                SparseBooleanArray checkedPositions =mylist.getCheckedItemPositions();
                if(checkedPositions.get(arg2)==true){
                getSelectedItemOfList = (String) mylist.getItemAtPosition(arg2);
                t1.append(getSelectedItemOfList.toString()+"\n");}
            }
        });
4

10 に答える 10

6

onitemclickListener を実装して項目 ID を取得し、arrayadapter でクリックされた項目を削除してから、次に adapter.notifyDataSetChanged(); を呼び出します。

于 2012-08-14T06:21:58.187 に答える
2

これを試して...

        mylist.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> adapter, View v, int position,
                                long arg3) {
            String value = (String) adapter.getItemAtPosition(position);
            adapter.remove(value);
            adapter.notifyDataSetChanged();               
        }
    });
于 2015-12-28T20:13:05.967 に答える
1

リスト項目を選択/クリックすると、選択した項目の名前が表示され、削除操作を実行できるように使用OnItemClickListener()する必要があると思います。listview

これを試して。

    mylist.OnItemClickListener(listenerOflistView);

private OnItemClickListener listenerOflistView = new OnItemClickListener() {
    private String getSelectedItemOfList;

    public void onItemClick(AdapterView<?> view, View view1, int pos,
            long arg3) {
        // TODO Auto-generated method stub

    getSelectedItemOfList = mylist.get(pos).toString(); // here you will get selected item name.
      }
    }

これがあなたを助けることを願っています。

于 2012-08-14T06:33:40.190 に答える
0

交換

delete.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View arg0) {
            mylist.setOnItemClickListener(new OnItemClickListener() {
                private String getSelectedItemOfList;
                @Override
                public void onItemClick(AdapterView<?> arg0, View arg1,
                        int arg2, long arg3) {
                    // TODO Auto-generated method stub
                     getSelectedItemOfList = sortedList.get(arg2).getStr_movieParam();
        }
    });

 mylist.setOnItemClickListener(new OnItemClickListener() {
                private String getSelectedItemOfList;
                @Override
                public void onItemClick(AdapterView<?> arg0, View arg1,
                        int arg2, long arg3) {
                    // TODO Auto-generated method stub
                     getSelectedItemOfList = sortedList.get(arg2).getStr_movieParam();
        }
    });

delete.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View arg0) {

                 adapter.remove(getSelectedItemOfList );
adapter.notifydatasetChanged

        }
    });

これをチェックしてください

于 2012-08-14T09:54:08.147 に答える
0

動作するコードを試してください: listAdapter.remove(listAdapter.getItem(position)); mainListView.setAdapter( listAdapter );

于 2015-06-24T11:15:33.823 に答える
0

これを行う最善の方法 (本当に最善の方法はカスタム アダプターです) は、クラス内の項目の配列リストのコピーを保持することです。次に、削除が呼び出されたら、配列リストのコピーからアイテムを削除し、リストビューを再初期化します。

于 2012-08-14T06:24:46.037 に答える
0

最初に、あなたが書いたコードが間違っていることを伝えたいと思います...リストビューのコンテキストメニューが必要かもしれません..

選択したアイテムの位置を取得している場合は、次のことができます

adapter.removeItem(adapter.getItem(position));
adapter.notifyDatasetChanged()

これはあなたを助けるかもしれません

于 2012-08-14T06:28:18.740 に答える
0

http://appfulcrum.com/2010/09/12/listview-example-3-simple-multiple-selection-checkboxes/でこのコードを操作してみてください。

于 2012-08-20T02:16:51.433 に答える
0

public class ListTest extends Activity {

String selectedItem;
ArrayAdapter<String> adapter;
ArrayList<String> newList = new ArrayList<String>();
ListView l1;

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.list_test);

  l1 = (ListView) findViewById(R.id.lsvSign);

    newList.add("Android");
    newList.add("iOS");
    newList.add("Mac");
    newList.add("Windows");
    newList.add("Linux");;
    Collections.sort(newList);
    adapter = new new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,newList);
    l1.setAdapter(adapter);  


  l1.setOnItemClickListener(new OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> arg0, View arg1, int position,
            long arg3) {            
         selectedItem = l1.getItemAtPosition(position).toString();           
       RemoveItem(selectedItem);

    }
});  
protected void RemoveItem(String item) {
    newList.remove(item);
    adp2.notifyDataSetChanged();
}   
}

}

于 2013-09-25T13:10:45.153 に答える