ListView ArrayAdapter,隐藏在Row里面的孩子?

Dea*_*mas 0 android android-layout android-listview android-adapter

我感觉有点愚蠢,因为我找不到这个问题的答案,这让我觉得我实际上是在问错误的问题.但是,这里......

我有一个列表视图,以及在xml中定义的listviewitem,有几个字段,没什么特别的.全部设置为可见.

然后我使用自定义ArrayAdapter绑定到我的ListView,并希望在第5行隐藏我的一个文本视图.但是,它似乎隐藏了我在项目0和项目5上的TextView.这有点奇怪?我已经简化了代码,重现了问题,希望有人能够帮助我......

我的适配器

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

我的绑定代码

    // 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));
Run Code Online (Sandbox Code Playgroud)

提前致谢!

Ale*_*lov 6

由于ArrayAdapter会重复使用行视图,因此一旦设置了View.GONE,它就会进入下一行,此视图将被重用.在您的情况下,您将View.GONE设置为第五行中的textview,移动列表一点,arrayadapter决定重用第五行布局来显示第一行,因为没有对其进行任何更改,textView仍然保持隐藏状态.

只需这样做:

if (position == 5) {
            tt.setVisibility(View.GONE);
} else {
            tt.setVisibility(View.VISIBLE);
}
Run Code Online (Sandbox Code Playgroud)

PS如果您还没有,请观看谷歌有关ListViews的演示文稿.那里有大量使用信息.列表视图