0

私は4タブアプリケーションを持っています。 1つのタブにはリストビューがあります。アプリケーションが最初に開くと、listviewのすべてが正常です。しかし、私はタブを変更すると、リストビューの項目が重複しています。この問題を解決するにはどうすればよいですか?選択したタブ変更リストビューのアイテムが重複している

タブ3 onCreateメソッド;

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

     ... 
} 

アダプタクラス

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

私は私が最優先のフラグメントのライフサイクルメソッドでリストビューをクリアしなければならないと思います。しかし、どうすればいいのか分かりません。あなたのコメントを待っています。

ありがとうございます。

答えて

1

すでに書かれている回答は、しかし、この動作の主な理由は、Singleton Fragmentsを使用しているようで、これも良いアプローチです。 タブ間を切り替えると、フラグメントはViewPagerから破棄されますが、フラグメントオブジェクト自体は依然として存在し、そのオブジェクトに戻ったときにオブジェクトは再びビューページャーに挿入され、onCreateViewが呼び出されますもう一度、ここでの解決策(すでに書いた回答の横にある)は、ViewPagerが破棄せずに処理できるフラグメントの数を設定することです。デフォルトのViewPagerは現在表示されているフラグメントの横に1つのフラグメントを保持するだけです。それ以上のものは破棄されます。viewpager.setOffscreenPageLimit(int)を使用すると、ビューのページャーが破棄することなく保持できるフラグメントの数を設定でき、onCreateは呼び出されません再び。

+0

それは動作しますが、メモリに問題はありますか? –

+0

各フラグメントにListViewがあれば、すでに断片化したプロジェクトがあり、オフセットの制限を20以上に設定していて、メモリの問題は発生しませんでした。メモリに問題がある場合は、他の回答の1つを試してみる必要があります。たとえば、ViewPagerからのフラグメントの追加/削除を有効にしますが、すでに読み込まれている場合はアイテムを複数回読み込まないようにしてください。 –

+1

ありがとうございます。それは働いている。 Accualy他の答えも動作しますが、これは正しい方法です。 –

1

あなたのonCreate()メソッド

+0

作業中です。ありがとうございました。 –

0

あなたが重複した場合は、Webサービスやデータベースの値をチェックし、また、あなたがしていることを確認それでもこの

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

を試してみてくださいで

items.clear(); 

を追加適切にリストに追加する

関連する問題