我正在使用自定义ListFragment来显示一个列表,其中偶数行有背景而奇数行没有。为此,我使用覆盖的getView(int,View,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));
}
答案 0 :(得分:1)
用于组成列表的视图会在屏幕上显示后重复使用。
在原始代码中,一旦背景在给定视图上设置为R.drawable.marcador_wink_normal,它就永远是R.drawable.marcador_wink_normal。添加else后,您可以在这些重用的视图上正确设置背景。
答案 1 :(得分:0)
好的,我只是添加 else 语句解决了这个问题:
@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;
}
但我仍然不明白为什么会出现问题。