更新后保持ListView的位置

时间:2014-05-15 10:21:40

标签: android listview updates

我正在创建一个不断更新的listView。每次有更新时,它都会回到第一个项目。我想在每次更新后保持这种情况。

    public class Receiver extends BroadcastReceiver{

@Override
public void onReceive(Context context, Intent intent) {

    if(intent.getAction().equals(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION)){

         results = wifi.getScanResults();
         MonAdaptateurDeListe adaptateur = new MonAdaptateurDeListe();

             //list1.setAdapter(adaptateur); 

             if(list1.getAdapter()==null)
            {
                            list1.setAdapter(adaptateur);
            }
            else
                            {
            adaptateur.notifyDataSetChanged();
            //adaptateur.clear();
            list1.setAdapter(adaptateur);
            }
            }
                        }
}

2 个答案:

答案 0 :(得分:1)

问题的根源是因为您再次调用 setAdapter()。尝试将适配器的实例保存为字段,在创建过程中,将其设置为ListView,不要再触摸 ListView

现在,当您收到更新时,您只需要在适配器上使用新数据调用' setter '方法并调用: notifyDataSetChanged() ...每次更新时请勿致电 setAdapter()

答案 1 :(得分:0)

正如我在评论中所说:

ListAdapter adapter = list.getAdapter();
if(adapter == null){
   adapter = new MonAdaptateurDeListe();
}else{
   // usually here you add the values to the adapter
   // for example, in case it's an ArrayAdapter you call `add(value)` on it
   adapter.notifyDataSetChanged()
}

这是因为当您只更改适配器中的数据时,列表会自动记住位置。但如果您要更换整个适配器,它将重置。