Android 向下滚动或选择其他项目时,ListView奇偶行自动刷新
我使用偶数行和奇数行将backgrond设置为我的listview行。在我的efficientAdapter中,我将行背景设置如下:Android 向下滚动或选择其他项目时,ListView奇偶行自动刷新,android,android-listview,Android,Android Listview,我使用偶数行和奇数行将backgrond设置为我的listview行。在我的efficientAdapter中,我将行背景设置如下: public View getView(int position, View convertView, ViewGroup parent) { vi = convertView; if (convertView == null) { vi = inflater.inflate(R.layout.ecran
public View getView(int position, View convertView, ViewGroup parent) {
vi = convertView;
if (convertView == null) {
vi = inflater.inflate(R.layout.ecran_multiple_row, null);
holder = new ViewHolder();
holder.txIndex = (TextView) vi.findViewById(R.id.txIndex);
holder.txSTitle = (TextView) vi.findViewById(R.id.txSTitle);
holder.btOnOFF = (ImageView) vi.findViewById(R.id.btOnOFF);
vi.setTag(holder);
} else
holder = (ViewHolder) vi.getTag();
/*
* CHANGE ROW COLOR 0 WHITE 1 GRAY
*/
if ( position % 2 == 0) //0 even 1 odd..
vi.setBackgroundResource(R.drawable.listview_selector_odd);
else
vi.setBackgroundResource(R.drawable.listview_selector_even);
/*
* ONE ITEM IN ARRAY
*/
if (data.toArray().length==1){
holder.btOnOFF.setBackgroundResource(R.drawable.air_radio_button_rouge);
}else {
holder.btOnOFF.setBackgroundResource(R.drawable.air_deezer_check);
}
return vi;
}
在我的课堂上。我使用on itemclicklistener()选择一个项目,如下所示:
**lvRMultiple.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
imgview = (ImageView) view.findViewById(R.id.btOnOFF);
//And change its background here
imgview.setBackgroundResource(R.drawable.air_radio_button_rouge);
}
});**
**lvRMultiple.setOnItemClickListener(新的OnItemClickListener(){
public void onItemClick(AdapterView父级、视图、,
内部位置,长id){
imgview=(ImageView)view.findViewById(R.id.bToOff);
//改变它的背景
imgview.setBackgroundResource(R.drawable.air\u radio\u button\u rouge);
}
});**
当我点击一个项目btnOff图像更改成功,但当我向下滚动时,它会更改为默认背景。其次,当我依次单击一个项目时,另一个项目都将成为新图像,但我只希望用户单击的行更改为新图像,而上一个图像设置为默认值。由于视图被回收,项目将更改回默认背景。这与复选框丢失其选中状态的问题相同 也请查看此答案,了解如何处理此问题: 至于你的第二个问题,我相信这里已经回答了:
希望对您有所帮助,因为视图被回收,所以项目将更改回默认背景。这与复选框丢失其选中状态的问题相同 也请查看此答案,了解如何处理此问题: 至于你的第二个问题,我相信这里已经回答了:
希望它能帮助类的getView()方法创建的ListView的所有行视图。当我们滚动ListView all时,getView()使用recycle创建新的可行行。所以,当新的行在scroll上可行时,getView()会被反复调用 您的问题有两种解决方案:-\
- 您可以保存ListView的状态
- 另一种解决方案是在运行时创建RowView,并使用addView()方法将其添加到父布局中
//您应该使用LinerLayout而不是listview,并且父布局应该位于ScrollView内部
parentView=(LinerLayout)this.findviewbyd(R.id.parentView);
对于由类的getView()方法创建的ListView的(int i=0;iAll row view)。当我们滚动ListView All时,使用recycle由getView()创建新的可行行。因此,当新行在scroll上可行时,getView()会反复调用
您的问题有两种解决方案:-\
- 您可以保存ListView的状态
//保存列表视图状态
Parcelable状态=listView.onSaveInstanceState()
- 另一种解决方案是在运行时创建RowView,并使用addView()方法将其添加到父布局中
LayoutFlater充气机=LayoutFlater.from(上下文)
//您应该使用LinerLayout而不是listview,并且父布局应该位于ScrollView内部
parentView=(LinerLayout)this.findviewbyd(R.id.parentView);
对于(int i=0;我给if-else
block添加了正确的大括号。if-else block有什么问题?给if-else
block添加正确的大括号。if-else block有什么问题?第一个解决方案是正确的解决方案,第二个解决方案可能需要更多的时间来创建行。在哪里为第一个解决方案设置这些行?如果能够使用上面的第一个解决方案,但我不明白应该在哪里调用listView.onRestoreInstanceState(state)
等。第一个解决方案是正确的解决方案,第二个解决方案可能需要更多的时间来创建行。在哪里为第一个解决方案设置这些行?能够使用上面的第一个解决方案会很好,但我不明白应该在哪里调用listView.onRestoreInstanceState(state)
等。
// Set new items
listView.setAdapter(adapter);
// Restore previous state (including selected item index and scroll position)
listView.onRestoreInstanceState(state)
// You should use the LinerLayout instead of the listview, and parent Layout should be inside of the ScrollView
parentView = (LinerLayout)this.findViewById(R.id.parentView);
for(int i = 0; i<=numberOfRow;i++){
LinearLayout rowView = (LinerLayout)inflater.inflate(R.layout.rowView);
ImageView rowImageView = (ImageView)rowView.findViewById(R.id.rowImage);
rowImageView.setOnClickListener(new View.onClickListListener(){
@Override
public void onClick(){
rowImageView.setImageBitmap(onClickBitmapImage);
}
});
parentView.addView(rowView);
}