0

一部のデータをダウンロードして解析するアプリケーションのスタートアップ アクティビティを作成しています。ロード中に、プログレスバーと「ロード中」に設定されたテキストビューを含む startup_loading.xml ファイルを表示したいと思います。スタートアップで行う必要があることはすべて、startUp スレッドというスレッドに入れられます。このスレッドを実行した後、データが読み込まれます。次に、新しいビューを表示したいと思います: startup_loaded.xml には、アプリケーションのさまざまなアクティビティに移動する 2 つのボタンが含まれています。

しかし、2つのビューを使用して、必要なときにそれらを表示するのに問題があります。私が入れたらと思った

setContentView(R.layout.startup_loaded);

私のスレッドの実行可能ファイルの最後では機能しますが、それは不可能であるというエラーが表示されます

CalledFromWrongThreadException: ビュー階層を作成した元のスレッドのみがそのビューにアクセスできます。

次のように修正できると思いました:

@Override
public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);

    startUp.start();
    String language =  Locale.getDefault().getISO3Language();
    if (startUp.isAlive()) {
        setContentView(R.layout.startup_loading);
        tv1=(TextView)findViewById(R.id.tvloading);
        if(language.equals("nld")) {
            tv1.setText("bijwerken");
        } else {
            tv1.setText("loading");
        }
        pbar=(ProgressBar)findViewById(R.id.progressBar1);
        pbar.setVisibility(1);
    } else {
        setContentView(R.layout.startup_loaded); 
    }
}
Thread startUp= new Thread() {
    public void run() {
        // all the loading
    }
};

しかし、これも機能しませんでした。私の startup_loaded は表示されませんでした。スレッドを終了しようとしましたが (finish();ランナブルの最後で)、合計アプリで終了しました。誰が何をすべきか知っていますか?

4

1 に答える 1

1

Handlerオブジェクトを使用します。または、AsyncTaskを使用して onPostExecute() メソッドで新しいコンテンツを設定します。

于 2012-07-24T10:34:25.763 に答える