0

私のAndroidアプリは、マニフェストで定義されていない単一の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 に答える