如何从一个函数内部刷新Android ListView

时间:2016-04-07 20:43:37

标签: android listview layout refresh

在向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函数。当此函数结束时,将刷新活动。

1 个答案:

答案 0 :(得分:0)

观察您的代码会让我发现问题的真正原因是pingHost()proc.waitFor();waitFor()是阻止通话。 这意味着您持有UI线程(因为这是您执行操作的线程)。 以及ListView仅在最后一次刷新并且我确定它仅在for loop的最后一次迭代中更新的原因与here相同并且我已发布同样的答案。你可以阅读它。