0

Ich habe eine Vier-Tab-Anwendung. Eine Registerkarte hat eine Listenansicht. Wenn die Anwendung zuerst geöffnet wird, ist alles normal in der Listenansicht. Aber wenn ich Tabs ändere, dann verdoppeln ListView-Elemente. Wie kann ich dieses Problem lösen?Wenn ausgewählte Registerkarte ändern Listenansicht Elemente Duplizieren

Registerkarte 3 onCreate Method;

final List<k_lbir_c> items = new ArrayList<k_lbir_c>(); 
listAdapter adapter; 

@Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     ... 

     final ListView listView = (ListView) view.findViewById(R.id.listView); 
     adapter = new listAdapter(getActivity(),items); 
     listView.setAdapter(adapter); 

     ... 
} 

Adapter Klasse

class listAdapter extends BaseAdapter { 

    private LayoutInflater mInflater; 
    private List<k_lbir_c> items; 

    public listAdapter(Activity activity,List<k_lbir_c> items){ 
     mInflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     this.items = items; 
    } 

    @Override 
    public int getCount() { 
     return this.items.size(); 
    } 

    @Override 
    public Object getItem(int position) { 
     return this.items.get(position); 
    } 

    @Override 
    public long getItemId(int position) { 
     return position; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     mViewHolder mVHolder; 

     if(convertView==null) 
     { 
      convertView = mInflater.inflate(R.layout.k_lbir,null); 
      mVHolder = new mViewHolder(); 
      convertView.setTag(mVHolder); 
     } 
     else 
     { 
      mVHolder = (mViewHolder)convertView.getTag(); 
     } 

     mVHolder.texvV = (TextView)convertView.findViewById(R.id.textView); 
     mVHolder.imageV = (ImageView)convertView.findViewById(R.id.k_lbir_iv); 

     k_lbir_c item = items.get(position); 

     mVHolder.texvV = tvDetails(convertView,R.id.textView,item.getIsim()); 
     mVHolder.imageV = ivDetails(convertView,R.id.k_lbir_iv,item.getImaj()); 

     return convertView; 
    } 

    private TextView tvDetails(View v,int ResId,String Text){ 
     TextView textView = (TextView)v.findViewById(ResId); 
     textView.setText(Text); 
     return textView; 
    } 

    private ImageView ivDetails(View v,int ResId,Drawable image){ 
     ImageView imageView = (ImageView)v.findViewById(ResId); 
     imageView.setImageDrawable(image); 
     return imageView; 
    } 

    private static class mViewHolder{ 
     TextView texvV; 
     ImageView imageV; 
    } 
} 

ich glaube, ich Listview mit überwiegendem Fragmente leben cycling Methoden löschen muß. Aber ich weiß nicht, wie ich das machen kann. Warte auf deine Kommentare.

Vielen Dank.

Antwort

1

Die bereits geschriebenen Antworten lösen das Problem lem, Aber der Hauptgrund für dieses Verhalten ist anscheinend, dass Sie Singleton-Fragmente verwenden und das ist auch ein guter Ansatz. Problem ist also, dass wenn Sie zwischen Tabs wechseln die Fragmente von der ViewPager zerstört wird, aber das Fragment-Objekt selbst noch existieren, und wenn zurück zu ihm, das Objekt wieder in den View-Pager eingesetzt wird und onCreateView aufgerufen wird Die Lösung besteht hier (neben den bereits geschriebenen Antworten) darin, die Anzahl der Fragmente festzulegen, die ViewPager verarbeiten kann, ohne sie zu zerstören. der Standardwert, dass ViewPager nur ein Fragment neben dem aktuell angezeigten Fragment hält, mehr als das wird zerstört. Sie können viewpager.setOffscopePageLimit (int) verwenden, um die Anzahl der Fragmente festzulegen, die der Ansichtspager ohne Zerstörung behalten kann und onCreate nicht aufgerufen wird nochmal.

+0

es funktioniert, aber Speicherprobleme? –

+0

Wenn Sie nur ein ListView in jedem Fragment haben, habe ich bereits ein Projekt mit Fragmenten und setzen Sie das Offset-Limit auf mehr als 20 und nie Speicherprobleme. Wenn Sie ein Speicherproblem haben, dann müssen Sie eine der anderen Antworten versuchen, so dass Sie das Hinzufügen/Entfernen von Fragment von ViewPager aktivieren, aber verhindern, dass Elemente mehr als einmal geladen werden, wenn sie bereits geladen sind –

+1

Vielen Dank. Es funktioniert. Accualy andere Antworten funktionieren auch, aber das ist der richtige Weg. –

1

hinzufügen

items.clear(); 

in Ihrem onCreate() -Methode

+0

Arbeiten. Vielen Dank. –

0

Versuchen Sie, diese

List<k_lbir_c> items=new ArrayList<>(); 

public listAdapter(Activity activity,List<k_lbir_c> items){ 
if(this.items.size>0) 
{ 
this.items.clear; 
} 
mInflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
this.items = items; 
} 

Noch Wenn Sie doppelte bekommen, Ihre Web-Service oder Datenbankwerte überprüfen und auch überprüfen, ob Sie korrekt zur Liste hinzufügen

Verwandte Themen