Android 是否从getView内的线程中更新视图?

Android 是否从getView内的线程中更新视图?,android,baseadapter,Android,Baseadapter,我有一个activity类,它调用扩展基本适配器的自定义适配器类。在我的getView方法中,我有一个按钮。setOnClickListener其中有一个下载数据的线程。我想在用户单击时将按钮文本设置为“下载”,然后在下载完成后,将按钮文本设置为“完成”。我该怎么做 public class MyActivity extends Activity { //some code here private void setAdapter(ArrayList arrayList) {

我有一个activity类,它调用扩展基本适配器的自定义适配器类。在我的
getView
方法中,我有一个
按钮。setOnClickListener
其中有一个下载数据的线程。我想在用户单击时将按钮文本设置为“下载”,然后在下载完成后,将按钮文本设置为“完成”。我该怎么做

public class MyActivity extends Activity {
//some code here
private void setAdapter(ArrayList arrayList) {      
    listView.setAdapter(new UserAdapter(context,arrayList));        
}
}


public class UserAdapter extends BaseAdapter {

@Override
public View getView(int position, View convertView, ViewGroup parent) {     
     Holder holder = new Holder();      
     holder.button = (Button) view.findViewById(R.id.button);
     holder.button.setOnClickListener(new View.OnClickListener() {
     @Override
     public void onClick(View v) {
        new Thread(new Runnable() {
            @Override
            public void run() {

                try{
                  //set button text to "downloading"
                  //establish an http connection and download data
                  //after download done, if successfull set button text to downloaded
                  //if download failed, set button text to failed.
                } catch (Exception exception) {
                }
            }
            }
        ).start();
      }
    });

    return view;
}
private class Holder {
    private Button button;
}
}

为了更新线程内部的视图,在getView方法中使用runOnUithread,如下所示。在活动内部,您可以直接使用,但在活动外部,您必须使用上下文

context.runOnUiThread(new Runnable(){
    public void run() {
        //If there are stories, add them to the table

      try{
           }
        } catch (final Exception ex) {
            Log.i("---","Exception in thread");
        }
    }
});

对于http请求,您可以使用asyncTask。

使用这种方法会很困难。如果按钮在下载过程中滚动屏幕,视图被回收,然后重新使用到ListVIEW中的新行,那会怎么样?非常感谢。工作起来很有魅力,只是需要在跑步中尝试一下,但错过了:)。此外,它还需要一个演员的活动。