在android中没有notifyDatasetChanged()的单行更新ListView按钮

时间:2015-12-31 06:05:55

标签: android listview

我有一个自定义ListView BaseAdapter,其中包含每行中的按钮ImageViewSeekBar,具体取决于设备。我想根据更新状态更新状态收到的价值。 要更新视图代码

Roomactivity

public class RoomActivity extends Activity 
{
   protected void onCreate(Bundle savedInstanceState)
    {

    }
   public static void receivedvalue(String receivedvalue)
   {
    // TODO Auto-generated method stub
       if(RoomActivity.active==false)
        {

        }
       else  
       {            
            if(id.equals(received[1]))
            {
                customadapter.updateListView(i,status,device);  
            }
        }   
    }
}

customadapter

class customadapter extends BaseAdapter implements ListAdapter
{

   public static void updateListView(int position, String status, String device) 
   {
    // TODO Auto-generated method stub

     View convertView =listview.getChildAt(position);
     if(list.contains(device))
     {                                  
            SeekBar bar = (SeekBar) convertView.findViewById(R.id.dimmerseekBar);
            bar.setProgress(Integer.parseInt(status));      
     }
     else
     {          
        ImageButton  switchingactiveicon = (ImageButton)convertView.findViewById(R.id.switchingactiveicon);
        switchingactiveicon.setImageResource(R.drawable.redled);

     }    
  }
}

状态正在使用SeekBar进行更新,但是当我尝试设置图片时,它会以[{1}}的形式提供预览。 我将如何解决这个问题,为什么会出现这个问题。任何人都可以帮助我,我尝试了不同的形式,但没有工作。

3 个答案:

答案 0 :(得分:0)

你不能单独做那一行。 只需离开android太刷新视图。 也就是说,在getView方法下,对控件执行赋值。

声明listview public

public List<T> listview;

从活动或片段中分配更新的值。并致电adapter.Notifydatasetchanged();

答案 1 :(得分:0)

要更新单个列表项,您必须在指定位置获取视图,然后更新视图。

您可以使用以下方法获取list_item,

public View getViewByPosition(int position) {
        final int firstListItemPosition = filesListview.getFirstVisiblePosition();
        final int lastListItemPosition = firstListItemPosition + filesListview.getChildCount() - 1;
        if (position < firstListItemPosition || position > lastListItemPosition) {
            // return filesListview.getAdapter().getView(position, filesListview.getChildAt(position), filesListview);
            return null;
        } else {
            final int childIndex = position - firstListItemPosition;
            return filesListview.getChildAt(childIndex);
        }
    }

如果给定位置的View在listview中可见,则上面的方法将返回视图,否则它将返回null。例如,如果列表视图包含20个元素,并且当前listview显示0-6个元素,那么上面的方法将返回0-6的视图,其他将返回null。

   View viewByPosition = getViewByPosition(position;
    // If the retrived view is not null then udpate the view otherwise ignore.
    if (viewByPosition != null) {
       //Update the view
    }

希望这会对你有帮助!

答案 2 :(得分:0)

您需要在想要刷新时再次调用适配器,然后才能使用

例如,

 private DataAdapter dataAdapter;
        _dataAdapter = new DataAdapter(Activity.this);                 

    if (_dataAdapter != null) {
        DayList.setAdapter(_dataAdapter);
    }