我正在使用自定义listfragment来显示一个列表,其中偶数是背景和奇数行没有。为此,我用overriden getView(int,视图,viewgroup)方法制作了ArrayAdapter的子类,并在那里设置偶数行的后台资源。

它工作,但我需要调整视图的尺寸,以等行,在带有和没有背景的行中等于,所以我调整了layoutparams,如下所示:

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View view = super.getView(position, convertView, parent);
    if ((position & 1) == 0) {
        view.setBackgroundResource(R.drawable.marcador_wink_normal);
    }
    ViewGroup.LayoutParams params = view.getLayoutParams();
    params.height = rowHeight;
    view.setLayoutParams(params);
    return view;
}
.

我尝试过这个,似乎工作,直到我向下滚动然后向上滚动,导致背景延续到每一行。

我的问题是:我做错了什么?

我正在使用片段的v4支持库,这是我自定义listfragment的oncreate(bundle)方法:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    int layout = Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB ?
            android.R.layout.simple_list_item_activated_1 : android.R.layout.simple_list_item_1;

    setListAdapter(new WinkAdapter(getActivity(), layout, TEST_LIST));
}
.

有帮助吗?

解决方案

在屏幕上不可见后,可以重复使用的视图。

在原始代码中,一旦背景设置为R.Drawable.mardor_wink_normal,它是r.cdrawable.marcador_wink_normal。添加否则时,您可以在这些重用视图上正确设置后台。

其他提示

好的,我解决了它只是添加了语句:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View view = super.getView(position, convertView, parent);
    if ((position & 1) == 0) {
        view.setBackgroundResource(R.drawable.marcador_wink_normal);
    }
    else {
        view.setBackgroundColor(0);
    }
    ViewGroup.LayoutParams params = view.getLayoutParams();
    params.height = 100;
    view.setLayoutParams(params);
    return view;
}
.

但我仍然不明白为什么问题发生了。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top