2014-03-29 151 views
2

我在導航抽屜適配器中遇到了一些問題。 它應該顯示如下的項目:Favorito,Categorias和分類下的小型子類別。導航抽屜中的動態佈局會遺棄視圖

我對導航抽屜適配器進行了編程,默認情況下使用big_layout.xml文件,但是如果它的位置大於某個值,那麼它使用small_layout.xml文件。

它對前幾項工作正常,但問題是當我向下滾動查看其餘項目時,他們使用big_layout.xml,然後當我向後滾動時,原始大項目會更改它們查看和使用小布局!

下面

是代碼,這是壞的結果的屏幕截圖:http://i.stack.imgur.com/QWwts.jpg

@Override 
public View getView(int position, View view, ViewGroup parent) { 
    if (view == null) { 
     LayoutInflater laoutInflater = (LayoutInflater) 
       context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE); 
     if (getItemId(position)>3) 
      view = laoutInflater.inflate(R.layout.drawer_list_item_small, null); 
     if (getItemId(position)<=3) 
      view = laoutInflater.inflate(R.layout.drawer_list_item, null); 
    } 

    ImageView icon = (ImageView) view.findViewById(R.id.icon); 
    icon.setImageResource(drawerItems.get(position).getIcon());   
    TextView title = (TextView) view.findViewById(R.id.title); 
    title.setText(drawerItems.get(position).getTitle()); 
    return view;} 

這有什麼錯我在幹什麼? ,是否有什麼缺失,可能是視圖穩定負責?

我該如何解決這個問題?

回答

0

你的問題是與回收。當您向下滾動並備份時,不再需要使用小布局的視圖,因此有資格進行回收 - 現在,該視圖不爲空,因此佈局不會根據其位置重新初始化,而只需更新新的內容。

您可以通過在您的列表適配器類中使用ViewType來解決此問題,覆蓋以下方法。

@Override 
public int getItemViewType(int position) { 
    return (position > 3) ? 0 : 1; 
} 

@Override 
public int getViewTypeCount() { 
    return 2; 
} 

然後,在你getView()你不會得到一個視圖(回收),如果它是錯誤的視圖類型。

@Override 
public View getView(int position, View view, ViewGroup parent) { 
    if (view == null) { 
     int layout = getLayoutForViewType(position); 
     view = LayoutInflater.from(parent.getContext()).inflate(layout, null); 
    } 
    ... 
    return view; 
} 

private int getLayoutForViewType(int position) { 
    if (getItemViewType(position) == 0) { 
     return R.layout.blahblahblah; 
    } 
    return R.layout.bloobloobloo; 
} 
+0

非常感謝!這確實解決了我的問題。豎起大拇指 –