development

Android에서 ListView 항목 제거

big-blog 2020. 12. 10. 20:51
반응형

Android에서 ListView 항목 제거


누군가가 모든 ListView 항목을 제거하고 새 항목으로 바꾸는 예제 코드를 줄 수 있습니까?

어댑터 항목을 성공적으로 교체하려고했습니다. 내 코드는

populateList(){

 results //populated arraylist with strings

 ArrayAdapter<String> adapter = new ArrayAdapter<String>(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<String> adapter1 = new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_1, results1);

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

여기 repopulateList()메서드는 ListView 항목에 추가되지만 모든 ListView 항목을 제거 / 대체하지는 않습니다.


당신이 원하는 것 remove()어댑터 개체에서 항목 후 바로 실행 notifyDatasetChanged()어댑터에, 어떤 ListView거기에 뜻 (해야) 재활용 및 업데이트 자체입니다.

다음은 s를 사용한 간단한 활동 예입니다 AlertDialog.

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();
        }
    });

다음 코드를 추가하면 작동 할 것이라고 생각합니다.

listview.invalidateViews();

항목을 제거하려면 어댑터에 전달한 배열 목록에서 해당 항목을 제거하고 수행 listview.invalidateViews();
하면 목록보기가 새로 고쳐집니다.


당신이 사용할 수있는

adapter.clear() 

그러면 첫 번째 어댑터의 모든 항목이 제거되고 다른 어댑터를 설정하거나 어댑터를 다시 사용하여 이전 어댑터에 항목을 추가 할 수 있습니다. 사용하는 경우

adapter.add()

목록에 데이터를 추가하기 위해 notifyDataSetChanged를 호출 할 필요가 없습니다.


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

그런 다음 전화 notifyDataSetChanged();


어댑터에서 제거하고 데이터 세트가 변경되었음을 어레이 어댑터에 알립니다.

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

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

이 코드는 나를 위해 잘 작동합니다.


  • 나열해야하는 데이터 목록과 바인딩 된 하나의 어댑터 만 사용해야합니다.
  • 모든 항목을 제거하고 교체해야하는 경우 "list.clear ()"를 사용하여 데이터 목록에서 모든 항목을 지우고 "list.addAll (List)"를 사용하여 새 데이터를 추가해야합니다.

여기에 예가 있습니다.

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

populateList(){
   List<String> result = getDataMethods();

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

repopulateList(){
   List<String> result = getDataMethods();

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

이 코드를 시도해보십시오.

public class Third extends ListActivity {
private ArrayAdapter<String> adapter;
private List<String> 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<String>();
     Collections.addAll(liste, values);
     adapter = new ArrayAdapter<String>(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();
  }
}

먼저 목록에서 항목을 제거해야합니다. 나중에 어댑터를 비우고 새 목록으로 다시 채울 수 있습니다.

private void add(final List<Track> 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();
        }

    });

}

It's simple .First you should clear your collection and after clear list like this code :

 yourCollection.clear();
 setListAdapter(null);

참고URL : https://stackoverflow.com/questions/2558591/remove-listview-items-in-android

반응형