2017-06-30 2 views
0

Ich versuche zu verhindern, dass meine Daten erneut in ListView generieren. Ich habe viele Beispiele ausprobiert, die ich online gesehen habe, wie adapter.clear oder listView.setAdapter(null).Wie lösche ich ListView/verhindere, dass es Android dupliziert?

Es könnte sein, weil ich die Daten zum ListView absichtlich jedes Mal, wenn ich auf den Cluster-Marker klicke, wird es weiter generieren. Ich versuche zu verhindern, dass es erneut generiert wird, indem ich den Adapter lösche, aber es funktioniert nicht. Ich werde meine Codes und Screenshots davon veröffentlichen, so dass es einfacher ist, mein Problem zu verstehen. Es ist ein logisches Problem, aber ich kann es nicht lösen. Kann mir jemand dabei helfen?

MyListFragment.java

public class MyListFragment extends ListFragment implements OnItemClickListener { 

     private ArrayAdapter adapter; 
     private List<String> location; 

     @Override 
     public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
      return inflater.inflate(R.layout.list_item_location, container, false); 
     } 


     @Override 
     public void onActivityCreated(Bundle savedInstanceState) { 
      super.onActivityCreated(savedInstanceState); 
      location = new ArrayList<>(); 
      adapter = new ArrayAdapter<>(getActivity(), android.R.layout.simple_list_item_1, location); 
    //  List<String> location = getActivity().getIntent().getStringArrayListExtra("clusterData"); 
    //  ArrayAdapter<String> adapter = new ArrayAdapter<>(getActivity(), android.R.layout.simple_list_item_1, location); 
    //  setListAdapter(adapter); 
      test(); 
      getListView().setOnItemClickListener(this); 
     } 


    @Override 
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
     String titleName = (String) parent.getItemAtPosition(position); 
     Log.d("listitem", titleName); 
     Intent intent = new Intent(getActivity(), Another.class); 
     intent.putExtra(EXTRA_NAME, titleName); 
     startActivity(intent); 
    } 

     private void test() { 
      location = getActivity().getIntent().getStringArrayListExtra("clusterData"); 
      adapter = new ArrayAdapter<>(getActivity(), android.R.layout.simple_list_item_1, location); 
      setListAdapter(adapter); 
    //  if (location.isEmpty()) { 
    //   location = getActivity().getIntent().getStringArrayListExtra("clusterData"); 
    //   adapter = new ArrayAdapter<>(getActivity(), android.R.layout.simple_list_item_1, location); 
    //   setListAdapter(adapter); 
    //  } else { 
    //   adapter.clear(); 
    //   adapter.notifyDataSetChanged(); 
    //  } 
    //  adapter.clear(); 
    //  location.clear(); 
    //  location = new ArrayList(); 
     } 




    } 

LocationRemitActivity.java

 private ArrayList<String> location; 
     location = new ArrayList<>() 

     mClusterManager.setOnClusterClickListener(new ClusterManager.OnClusterClickListener<StoreLatLng>() { 
      @Override 
      public boolean onClusterClick(final Cluster<StoreLatLng> cluster) { 
//    BottomSheetDialogFragment.getInstance(); 
       bottomSheetDialog.show(getSupportFragmentManager(), "Custom Bottom Sheet"); 
       for (StoreLatLng markersInsideCluster : cluster.getItems()) { 
        location.add(markersInsideCluster.getTitle()); 
       } 

       //Convert string array to a collection 
       getIntent().putStringArrayListExtra("clusterData", location); 
      location = new ArrayList<>(); 
       return true; 
      } 
     }); 

     // Add cluster items (markers) to the cluster manager. 
     addItems(); 
    } 

enter image description here

den Cluster Marker klicken, wird eine Liste erzeugen.

enter image description here

Ein Klick darauf wird wieder zweimal

enter image description here

+0

Veröffentlichen Sie Ihre 'onItemClick()' Methode. – earthw0rmjim

+0

Versuchen Sie listview.removeAllViews(); funktioniert es immer noch nicht Wenn Sie die arrayList generieren, versuchen Sie eine neue arrayList zu erstellen, um Ihr Problem zu lösen. –

+0

@ earthw0rmjim Ich habe meine 'onItemClick()' gepostet. Es wird einfach nur eine andere Seite mit Informationen auf der Grundlage des ausgewählten Elements. – arsenallavigne

Antwort

2

Keine Notwendigkeit Adapter zu löschen. Löschen Sie die Standortliste, bevor Sie ein neues Objekt in der Liste hinzufügen.

mClusterManager.setOnClusterClickListener(new ClusterManager.OnClusterClickListener<StoreLatLng>() { 
      @Override 
      public boolean onClusterClick(final Cluster<StoreLatLng> cluster) { 
       //BottomSheetDialogFragment.getInstance(); 
       bottomSheetDialog.show(getSupportFragmentManager(), "Custom Bottom Sheet"); 
       **if(location != null && !location.isEmpty()) { 
        location.clear(); 
        adapter.notifyDataSetChanged(); 
       }** 
       for (StoreLatLng markersInsideCluster : cluster.getItems()) { 
        location.add(markersInsideCluster.getTitle()); 
       } 

       //Convert string array to a collection 
       getIntent().putStringArrayListExtra("clusterData", location); 
      location = new ArrayList<>(); 
       return true; 
      } 
     }); 
2

erzeugen kurz vor

if(location!=null){ 
    location.clear();} 

hinzufügen Hinzufügen von Daten zu Die Liste. überprüfen Sie den Code unten:

private void test() { 
if(location!=null){ 
location.clear();} 
       location = getActivity().getIntent().getStringArrayListExtra("clusterData"); 

       adapter = new ArrayAdapter<>(getActivity(), android.R.layout.simple_list_item_1, location); 
       setListAdapter(adapter); 
     //  if (location.isEmpty()) { 
     //   location = getActivity().getIntent().getStringArrayListExtra("clusterData"); 
     //   adapter = new ArrayAdapter<>(getActivity(), android.R.layout.simple_list_item_1, location); 
     //   setListAdapter(adapter); 
     //  } else { 
     //   adapter.clear(); 
     //   adapter.notifyDataSetChanged(); 
     //  } 
     //  adapter.clear(); 
     //  location.clear(); 
     //  location = new ArrayList(); 
      } 
1
 Try this code in your test() method 

     location.clear(); 
     if(adapter!=null && location!=null) 
     { 
      adapter = new ArrayAdapter<>(getActivity(), android.R.layout.simple_list_item_1, location); 
      setListAdapter(adapter); 

     } 

     location = getActivity().getIntent().getStringArrayListExtra("clusterData"); 
     adapter = new ArrayAdapter<>(getActivity(), android.R.layout.simple_list_item_1, location); 
         setListAdapter(adapter); 
Verwandte Themen