ListView的奇数/偶数行刷新时自动向下滚动或选择AnotherItem [英] ListView Odd/Even Rows Refresh Automatically When Scrolling Down Or Selecting AnotherItem

查看:187
本文介绍了ListView的奇数/偶数行刷新时自动向下滚动或选择AnotherItem的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我用奇数和偶数行设置backgrond到我的列表视图行。在我efficientAdapter我设置的行背景如下:

 公共查看getView(INT位置,查看convertView,父母的ViewGroup){
        VI = convertView;        如果(convertView == NULL){            VI = inflater.inflate(R.layout.ecran_multiple_row,NULL);
            持有人=新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(保持器);
        }其他
            支架=(ViewHolder)vi.getTag();        / *
         * CHANGE行颜色0白色1 GRAY
         * /        如果(位置%2 == 0)// 0甚至1奇..
              vi.setBackgroundResource(R.drawable.listview_selector_odd);            其他
                vi.setBackgroundResource(R.drawable.listview_selector_even);
        / *
         *一个项目数组
         * /        如果(data.toArray()。长度== 1){
            holder.btOnOFF.s​​etBackgroundResource(R.drawable.air_radio_button_rouge);
        }其他{            holder.btOnOFF.s​​etBackgroundResource(R.drawable.air_deezer_check);
        }        返回VI;
    }

在我MainActivity.Class。我选择如下图所示的使用itemclicklistener()项:

  ** lvRMultiple.setOnItemClickListener(新OnItemClickListener(){
            公共无效onItemClick(适配器视图<>母公司,观景,
                    INT位置,长的id){                 imgview =(ImageView的)view.findViewById(R.id.btOnOFF);
                 //这里改变它的背景
                 imgview.setBackgroundResource(R.drawable.air_radio_button_rouge);
            }
        }); **

当我在一个项目btnOff图像变化单击成功,但是当我向下滚动将其更改为默认背景。其次,当我点击一个项目后,其他都将成为新的形象,但我想只有用户点击该行更改为新的图像和previous图像设置为默认值。


解决方案

由getView()的 BaseAdpter 类。当曾经我们都滚动ListView控件,新的可行行由getView创建()使用循环。所以getView()时,新行是可行的滚动一再呼吁。

有你的问题的两个解析: - \\


  • 您可以保存ListView控件的状态


  

//保存状态的ListView
      Parcelable状态= listView.onSaveInstanceState();

 设置新项目
listView.setAdapter(适配器);//恢复previous状态(包括所选项目的索引和滚动位置)
listView.onRestoreInstanceState(州)



  • 与其他的解决方案是在运行时创建RowView,并通过使用addView()方法将其添加在父布局。


  

LayoutInflater吹气= LayoutInflater.from(上下文);

  //您应该使用LinerLayout代替列表视图,和家长的布局应该是滚动型内
parentView =(LinerLayout)this.findViewById(R.id.parentView);的for(int i = 0; I< = numberOfRow;我++){
   的LinearLayout rowView =(LinerLayout)inflater.inflate(R.layout.rowView);
   ImageView的rowImageView =(ImageView的)rowView.findViewById(R.id.rowImage);
   rowImageView.setOnClickListener(新View.onClickListListener(){
     @覆盖
      公共无效的onClick(){
        rowImageView.setImageBitmap(onClickBitmapImage);
 }});
parentView.addView(rowView);
}


请检查这个答案<一个href=\"http://stackoverflow.com/questions/3014089/maintain-save-restore-scroll-position-when-returning-to-a-listview\">Maintain/Save/Restore滚动位置返回到ListView 时

更多参考
<一href=\"http://developer.android.com/reference/android/widget/Adapter.html#getView(int,android.view.View\" rel=\"nofollow\">http://developer.android.com/reference/android/widget/Adapter.html#getView(int,android.view.View, android.view.ViewGroup)

I use even and odd rows to set backgrond to my listview rows. In my efficientAdapter I set the row background as follows:

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;
    }

and in my MainActivity.Class. I select an item using on itemclicklistener() as shown below:

**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);


            }
        });**

When i clicked on an item btnOff image change successfully but when i scroll down it change to default background. Secondly when i click on one item after the other both becomes the new image but i want only the row clicked by the user to change to new image and the previous image are set to default.

解决方案

All row view of a ListView created by the getView() method of BaseAdpter class. When ever we scroll the ListView all, new viable row create by getView() using recycle. So getView() called again and again when new row is viable on scroll.

There are two solution of your question:-\

  • You can save the status of ListView

// Save ListView state Parcelable state = listView.onSaveInstanceState();

// Set new items
listView.setAdapter(adapter);

// Restore previous state (including selected item index and scroll position)
listView.onRestoreInstanceState(state)

  • And other solution is create RowView at runtime and add it on a Parent Layout by using addView() method.

LayoutInflater inflater = LayoutInflater.from(context);

// 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); 
}

Please check this answer Maintain/Save/Restore scroll position when returning to a ListView

More Reference http://developer.android.com/reference/android/widget/Adapter.html#getView(int,android.view.View, android.view.ViewGroup)

这篇关于ListView的奇数/偶数行刷新时自动向下滚动或选择AnotherItem的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆