ListView+adapter在apapter里面更新数据,然后notifyDatasetChange()就好

解决方案 »

  1.   

    你可以在异步线程中通过Handler发消息给主UI线程,通知UI线程更新界面
      

  2.   

    就这个能解决你的问题。
    获取数据在多线程里面 ,然后通知主线程里面的Handler进行UI更新就行了
      

  3.   


    如何通知主线程里面的Handler进行UI更新呢?
      

  4.   

    我在网上找了个方法private final int UPDATE_UI = 1; private Handler mHandler = new Handler() {
    @Override
    public void handleMessage(Message msg) {
    switch (msg.what) {
    case UPDATE_UI: {
    adapter.notifyDataSetChanged();
    next = true;
    break;
    }
    default:
    break;
    }
    }
    };
    class Thread1 extends Thread { ArrayList<Video> al;
    SelectDetailAdapter adapter;
    Receive callback;
    int page;
    int onecount; public Thread1(ArrayList<Video> al, SelectDetailAdapter adapter,
    Receive callback, int page, int onecount) {
    this.al = al;
    this.adapter = adapter;
    this.callback = callback;
    this.page = page;
    this.onecount = onecount;
    } public void run() {
    al.addAll(HelperFactory.getInstance().getServerStub()
    .retrVideoList(Constants.FIRSTVIEWSECTION,
    String.valueOf(page), onecount));
    通知主线程 mHandler.sendEmptyMessageDelayed(UPDATE_UI, 0); // Thread2 thread2 = new Thread2(al, adapter);
    // callback.onReceived(thread2);
    }
    }但是没有刷新,而且获取数据多了话还是会有异常,ui线程更新异常!
      

  5.   

    子线程下载数据 数据准备好了  然后通知UI线程刷新UI
      

  6.   

    public void run() {
    这里是下载数据
    al.addAll(HelperFactory.getInstance().get
    ServerStub()
    .retrVideoList(Constants.FIRSTVIEWSECTION,
    String.valueOf(page), onecount));
    这里通知主线程 mHandler.sendEmptyMessageDelayed(UPDATE_UI, 0);// Thread2 thread2 = new Thread2(al, adapter);
    // callback.onReceived(thread2);
    }
    这没用啊~
      

  7.   

    参考AsyncTask    private class TestAsyncTask extends AsyncTask<Object, Object, Object> {        @Override
            protected void onPreExecute() {
                // 获取数据前执行
                super.onPreExecute();
            }
            
            @Override
            protected Object doInBackground(Object... params) {
                // 从服务器获取数据
                return null;
            }
            
            @Override
            protected void onPostExecute(Object result) {
                // 刷新界面
                super.onPostExecute(result);
            }
        }
      

  8.   


    public static final int MSG_CLOSE_SERVER = 1;
    private final Handler _handler = new Handler(){
    @Override
            public void handleMessage(Message msg) {
    switch (msg.what) {
    case MSG_CLOSE_SERVER:
    //关闭监听
    setServerScoketEnabled(receiveOnOrOff,false);
    receiveOnOrOff.setChecked(false);
    break;
    }
    }
    };...public void run() {
    Message msg = handler.obtainMessage(EcardExchange.MSG_CLOSE_SERVER);
    handler.sendMessage(msg);
    }
    用这种方法试试
      

  9.   

    每一个AsyncTask只能执行一次,如果要调用的话,自己继承一个AsyncTask,每次使用new TestAsyncTask.execute(null);