2011-02-04 128 views
0

我覺得有點愚蠢,因爲我找不到這個問題的答案,這讓我覺得我實際上問了錯誤的問題。然而,這裏去...ListView ArrayAdapter,隱藏行內的兒童?

我有一個列表視圖和一個listviewitem在xml中定義,有幾個字段,沒有什麼特別的。全部設置爲可見。

然後我使用自定義ArrayAdapter綁定到我的ListView,並希望在第5行隱藏我的文本視圖中的一個。但是,它似乎隱藏了我的TextView上的項0和項5.這有點奇怪?我已經簡化了代碼,重現問題,希望有人能夠幫助我......

我的適配器

public class MenuScreenAdapter extends ArrayAdapter<String> 
{ 
    private List<String> _items; 
    private Context _context; 

    public MenuScreenAdapter(Context context, List<String> items) 
    { 
     super(context, R.layout.list_menu_item, items); 

     _context = context; 
     _items = items; 
    } 

    private MenuScreenAdapter(Context context, int textViewResourceId) 
    { 
     super(context, textViewResourceId); 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) 
    { 
     View v = convertView; 

     if (v == null) 
     { 
      LayoutInflater vi = (LayoutInflater) _context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      v = vi.inflate(R.layout.list_menu_item, null); 
     } 
     String o = _items.get(position);  
     if (o != null) 
     { 
      TextView tt = (TextView) v.findViewById(R.id.list_menu_item_name); 
      if (tt != null) 
       tt.setText(o); 

      if (position == 5) 
       tt.setVisibility(View.GONE); 
     } 
     return v; 
    } 
} 

我的綁定代碼

// Load everything up that we need 
    List<String> items = new ArrayList<String>(); 
    items.add("One"); 
    items.add("Two"); 
    items.add("Three"); 
    items.add("Four"); 
    items.add("Five"); 
    items.add("Six"); 
    items.add("Seven"); 
    items.add("Eight"); 
    items.add("Nine"); 
    items.add("Ten"); 

    // Get the ListView, and set it's adapter. The HomeScreenAdapter 
    // takes care of the rest 
    ListView homeScreenListView = (ListView) _mainActivity.findViewById(R.id.view_home_list); 
    homeScreenListView.setOnItemClickListener(ItemSelected); 
    homeScreenListView.setAdapter(new MenuScreenAdapter(_mainActivity.getBaseContext(), items)); 

提前致謝!

回答

6

由於行視圖被ArrayAdapter重用,所以一旦View.GONE被設置,它將會登錄到下一行,這個視圖將被重用。在你的情況下,你將View.GONE設置爲textview中的第五行,稍微移動列表,arrayadapter決定重用你的第五行佈局來顯示第一行,因爲沒有對它做任何更改,textView仍然保持隱藏狀態。

只是做了:

if (position == 5) { 
      tt.setVisibility(View.GONE); 
} else { 
      tt.setVisibility(View.VISIBLE); 
} 

附:如果你還沒有,從谷歌觀看有關ListViews的演示文稿。那裏有很多有用的信息。 ListViews

+0

奇妙的是,很高興這只是我對ListView的工作方式的誤解。謝謝你的幫助。 – 2011-02-04 11:44:08