Androidでリストビューアイテムを削除する

android android-listview
Androidでリストビューアイテムを削除する

誰かがすべてのListViewアイテムを削除して新しいアイテムに置き換えるサンプルコードを教えてもらえますか?

アダプターアイテムを交換しようとして成功しませんでした。 私のコードは

populateList(){

 results //populated arraylist with strings

 ArrayAdapter adapter = new ArrayAdapter(this,
                android.R.layout.simple_list_item_1, results);

 listview.setAdapter(adapter);
 adapter.notifyDataSetChanged();
 listview.setOnItemClickListener(this);

}

// now populating list again

repopulateList(){

 results1 //populated arraylist with strings

 ArrayAdapter adapter1 = new ArrayAdapter(this,
                android.R.layout.simple_list_item_1, results1);

 listview.setAdapter(adapter1);
 adapter1.notifyDataSetChanged();
 listview.setOnItemClickListener(this);
}

ここで、 `repopulateList()`メソッドはListViewアイテムに追加しますが、すべてのListViewアイテムを削除/置換するわけではありません。

  56  19


ベストアンサー

アダプタオブジェクトからアイテムを `remove()`して、アダプタで `notifyDatasetChanged()`を実行するだけで、 `ListView`はそれ自体でリサイクルおよび更新する必要があります。

以下に、 `AlertDialog`sを使用した簡単なアクティビティの例を示します。

adapter = new MyListAdapter(this);
    lv = (ListView) findViewById(android.R.id.list);
    lv.setAdapter(adapter);
    lv.setOnItemClickListener(new OnItemClickListener() {
    public void onItemClick(AdapterView<?> a, View v, int position, long id) {
        AlertDialog.Builder adb=new AlertDialog.Builder(MyActivity.this);
        adb.setTitle("Delete?");
        adb.setMessage("Are you sure you want to delete " + position);
        final int positionToRemove = position;
        adb.setNegativeButton("Cancel", null);
        adb.setPositiveButton("Ok", new AlertDialog.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {
                MyDataObject.remove(positionToRemove);
                adapter.notifyDataSetChanged();
            }});
        adb.show();
        }
    });

69


次のコードを追加すると、うまくいくと思います

listview.invalidateViews();

アイテムを削除するには、アダプターに渡したarraylistからそのアイテムを削除し、 `listview.invalidateViews();`を実行します+これによりリストビューが更新されます

23


あなたが使用することができます

adapter.clear()

最初のアダプタのすべてのアイテムが削除され、別のアダプタを設定するか、アダプタを再利用して古いアダプタにアイテムを追加できます。 使うなら

adapter.add()

リストにデータを追加するには、notifyDataSetChangedを呼び出す必要はありません。

19


int count = adapter.getCount();
for (int i = 0; i < count; i++) {
 adapter.remove(adapter.getItem(i));
}

次に、「notifyDataSetChanged();」を呼び出します

15


アダプタからそれを削除し、データセットが変更されたことをアレイアダプタに通知します。

m_adapter.remove(o);
m_adapter.notifyDataSetChanged();

9


            names = db.getSites();
            la = new ArrayAdapter(EditSiteList.this,
                    android.R.layout.simple_list_item_1, names);
            EditSiteList.this.setListAdapter(la);
            listview.invalidateViews();

このコードは私にとってはうまく機能します。

4


  • 必要なデータのリストにバインドされた1つのアダプターのみを使用する必要があります
    リストする

  • すべてのアイテムを削除および交換する必要がある場合は、すべてクリアする必要があります
    「list.clear()」を使用してデータリストからアイテムを作成し、「list.addAll(List)」を使用して新しいデータを追加します

ここに例:

List myList = new ArrayList();
ArrayAdapter adapter = new ArrayAdapter(this,       android.R.layout.simple_list_item_1, myList);
listview.setAdapter(adapter);
listview.setOnItemClickListener(this);

populateList(){
   List result = getDataMethods();

   myList.addAll(result);
   adapter.notifyDataSetChanged();
}

repopulateList(){
   List result = getDataMethods();

   myList.clear();
   myList.addAll(result);
   adapter.notifyDataSetChanged();
}

4


このコードを試してください、それは私のために動作します。

public class Third extends ListActivity {
private ArrayAdapter adapter;
private List liste;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_third);
     String[] values = new String[] { "Android", "iPhone", "WindowsMobile",
                "Blackberry", "WebOS", "Ubuntu", "Windows7", "Max OS X",
                "Linux", "OS/2" };
     liste = new ArrayList();
     Collections.addAll(liste, values);
     adapter = new ArrayAdapter(this,
                android.R.layout.simple_list_item_1, liste);
     setListAdapter(adapter);
}
 @Override
  protected void onListItemClick(ListView l, View v, int position, long id) {
     liste.remove(position);
     adapter.notifyDataSetChanged();
  }
}

2


最初に、リストからアイテムを削除する必要があります。 後でアダプタを空にして、新しいリストでアダプタを補充できます。

private void add(final List trackList) {
    MyAdapter bindingData = new MyAdapter(MyActivity.this, trackList);

    list = (ListView) findViewById(R.id.my_list); // TODO

    list.setAdapter(bindingData);


    // Click event for single list row
    list.setOnItemClickListener(new OnItemClickListener() {

        public void onItemClick(AdapterView<?> parent, View view,
                final int position, long id) {
            // ShowPlacePref(places, position);
            AlertDialog.Builder showPlace = new AlertDialog.Builder(
                    Favoriler.this);
            showPlace.setMessage("Remove from list?");
            showPlace.setPositiveButton("DELETE", new OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {

                    trackList.remove(position); //FIRST OF ALL REMOVE ITEM FROM LIST
                    list.setAdapter(null); // THEN EMPTY YOUR ADAPTER

                    add(trackList); // AT LAST REFILL YOUR LISTVIEW (Recursively)

                }

            });
            showPlace.setNegativeButton("CANCEL", new OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {

                }
            });
            showPlace.show();
        }

    });

}

1


それは簡単です。まず、コレクションをクリアし、次のコードのようなリストをクリアした後、

 yourCollection.clear();
 setListAdapter(null);

1


タイトルとURLをコピーしました