在向listview添加字符串后,我有一个关于刷新屏幕的问题。我添加字符串然后我使用adapter.notifyDataSetChanged()
但屏幕不会刷新,直到功能结束。我将字符串添加到listview后立即刷新
public class MainActivity extends AppCompatActivity {
public ArrayList listaConectados;
private TextView estado;
private ListView listaView;
public static int x;
private ArrayAdapter<String> adapter;
private ArrayList<String> arrayList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
estado = (TextView)findViewById(R.id.estado_TextView);
listaConectados = new ArrayList<Dispositivos>();
arrayList = new ArrayList<String>();
listaView = (ListView) findViewById(R.id.listaConectados_listView);
adapter = new ArrayAdapter<String>(getApplicationContext(),
android.R.layout.simple_list_item_1,arrayList);
listaView.setAdapter(adapter);
}
public void searchConnectedDispositives(View view) {
ArrayList listaParaActualizar = new ArrayList<String>();
int i;
int x;
String ip = getIpAddress();
String ipVariable = ip.substring(0,10);
for(i=0;i<255;i++){
int result=10;
String ipTemp = ipVariable +String.valueOf(i);
try {
result=pingHost(ipTemp);
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
if(result==0){
Dispositivos nuevo = new Dispositivos(ipTemp);
arrayList.add(ipTemp);
adapter.add(ipTemp);
adapter.notifyDataSetChanged();
}
}
当我触摸一个按钮时,会调用searchConnectedDispositives函数。当此函数结束时,将刷新活动。
答案 0 :(得分:0)
观察您的代码会让我发现问题的真正原因是pingHost()
,proc.waitFor();
和waitFor()
是阻止通话。
这意味着您持有UI线程(因为这是您执行操作的线程)。
以及ListView
仅在最后一次刷新并且我确定它仅在for loop
的最后一次迭代中更新的原因与here相同并且我已发布同样的答案。你可以阅读它。