0

我的 android 应用程序使用单个 Activity 来创建一个未在清单中定义的 SurfaceView,并且我的所有 UI 元素都是自定义的。现在我正在尝试进行异步 HTTP 调用,但我无法访问我的应用程序的任何类。我看到的异步 http 调用的每个示例都如下所示:

class RequestTask extends AsyncTask<String, String, String>{

    @Override
    protected String doInBackground(String... uri) {
        // Code to make http call
        return responseString;
    }

    @Override
    protected void onPostExecute(String result) {
        super.onPostExecute(result);
        TextView txt = (TextView) findViewById(R.id.output);
        // format the result and write it to the TextView object
    }
}

在该示例中,由于 RequestTask 无权访问任何应用程序对象,因此您可以使用 findViewByID 来获取它们。我不明白的是,如果我的清单中没有定义任何视图,我该如何访问我的应用程序的对象?我的清单中唯一的东西是活动:

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >

    <activity
        android:name="com.blah.blah.MyActivity"
        android:label="@string/app_name" >
        android:configChanges="keyboardHidden|orientation" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

我这样做是为了简单/懒惰,到目前为止效果很好。有没有办法在不使用 findViewById 的情况下访问我的应用程序(活动或其中定义的视图或我实例化的其他类),或者我是否需要在清单中定义我的 SurfaceView?

4

1 回答 1

0

向任务添加构造函数。在构造函数中传入它需要访问的视图。将其保存到任务的类变量中。

如果您需要做很多,请传入活动,并在活动上调用 findViewById。请记住在 onPostExec 结束时取消活动,以避免泄漏活动的风险。

于 2013-01-13T03:20:16.603 回答