0

我在一个屏幕上有listview,我将使用自定义的arraylist(List)呈现这个listview。在这里,当我想从另一个java类刷新listview时,我将使用上下文引用listview。但是如果我只引用listview,那就没有意义了,我还必须更改arraylist。为此,如何在不使用静态修饰符的情况下从另一个java类更改arraylist。

4

2 回答 2

1

尝试这个:

...
private Activity context;

onCreate() {
   ...
   context = this;
   ...
   //run async task somewhere
}

class extends AsyncTask<> {

   onPostExecute() {
      AlertDialog alert = new AlertDialog(context);
      // every time you used this on the activity you should use context on any other classes, including async task or other non activity classes
}

正如@Venkata Krishna 在下面的评论中提到的,如果您只想更新一个属性,您的代码应该如下所示:

...
private ArrayList<String> values;
private Activity context;

onCreate() {
    ...
    context = this;
    ...
    //run async task somewhere
}

class extends AsyncTask<> {
    private ArrayList<String> values;

    onPostExecute() {
        AlertDialog alert = new AlertDialog(context);
        //notice that there are 2 properties of values with the same name and the same signature
        //accessing async task's values
        this.values = ...;
        //accessing global parameter
        values = ...;
        // and then he would want to access the list adapter to update the infomation
        CustomListAdapter adapter = ((ListView)findViewById(R.id.listview)).getListAdapter();
        adapter.notifyDatasetChanged();
    }
}

只是使用全局和内部类变量的 java 编程。对于常规对象,您不需要拥有活动的“上下文”。只需更改变量,如果您想访问 UI,您需要通过存储上下文属性来完成技巧。

于 2012-07-04T07:13:21.390 回答
1

使用该活动的引用(上下文)onPostExecute()更新AsyncTask上的 UI 元素。

于 2012-07-04T06:55:12.380 回答