我正在创建一个不断更新的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);
}
}
}
}
答案 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()
}
这是因为当您只更改适配器中的数据时,列表会自动记住位置。但如果您要更换整个适配器,它将重置。