2016-09-15 14 views
2

私はアンドロイドアプリケーションで作業中で、ビューでビューページを使用しています。 PagerAdapterを使用して、ビューページ内のタブのビューを表示しています。 いくつかのタブを動的に追加/削除する必要があります。それに加えてタブを追加すると、instantiateItem関数が呼び出され、タブが正常に追加されています。しかし、viewpagerから任意のタブを削除すると、destroyItem関数を呼び出す必要がありますが、呼び出されず、Tabのビューが削除されません。 タブを追加/削除するために使用しているコードです。私はそれと一緒にすべてのタブを追加すると、私は、以下の方法を使用して追加していPageAdapterのdestroyItem関数は、ビューが削除されたときに呼び出されていません。

public List<View> viewsList = new ArrayList(); 
public HashMap<Integer, View> GridViewList = new HashMap<>(); 

MyAdapter myAdapter = new MyAdapter(); 
viewPager.setAdapter(myAdapter); 
viewPager.setOffscreenPageLimit(myAdapter.getCount() + 1); 

    private class MyAdapter extends PagerAdapter { 
    public MyAdapter() { 
     super(); 
    } 

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

    @Override 
    public Object instantiateItem(ViewGroup container, int position) { 
     View v = viewsList.get(position).rootView; 
     container.addView(v, 0); 
     return v; 
    } 

    @Override 
    public void destroyItem(ViewGroup container, int position, Object view) { 
     container.removeView((View)view); 
    } 

    @Override 
    public boolean isViewFromObject(View view, Object key) { 
     return key == view; 
    } 
} 

ビュー

View view = new View(); // I am making Custom View here 
viewsList.add(view); 
GridViewList.put(Id, view); 
myAdapter.notifyDataSetChanged(); 

だと私はすべてのビューを削除すると、私は法の下に使用します。

viewsList.remove(GridViewList.get(Id)); 
GridViewList.remove(Id); 
myAdapter.notifyDataSetChanged(); 

しかし、タブを削除するとdestroyItem関数が呼び出されず、アンドロイドのアダプタからビューが表示されます。誰かがこれについて考えているなら、私を助けてください。

ありがとうございました。

答えて

1

遅れていますが、destroyItemを呼び出すには、getItemPositionを実装する必要があります。この場合、のようなものはになるはずです:

@Override public int getItemPosition(itemIdentifier: Any) { 
    int index = viewsList.indexOf(itemIdentifiers); 
    return index == -1 ? POSITION_NONE : index; 
} 
関連する問題