Android 向下滚动或选择其他项目时,ListView奇偶行自动刷新

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

我使用偶数行和奇数行将backgrond设置为我的listview行。在我的efficientAdapter中,我将行背景设置如下:

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的状态
//保存列表视图状态 Parcelable状态=listView.onSaveInstanceState()

  • 另一种解决方案是在运行时创建RowView,并使用addView()方法将其添加到父布局中
LayoutFlater充气机=LayoutFlater.from(上下文)

//您应该使用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); 
}