0

タブホストで構成されるアプリがあります。を使用してAsyncTask、バックグラウンドでインターネット作業を実行しています。onPostExecuteでは、新しいアクティビティを開始したいと考えています。新しいインテントを作成すると、新しいアクティビティが表示されますが、タブはありません。アクティビティだけです。

今、私はこれを行う方法をオンラインで読みました。そして、私が思う正しい方向に進むことができました。これはコード全体です:

package com.appsoweb.kvodeventer;

import org.json.JSONObject;

import android.app.Activity;
import android.app.ActivityGroup;
import android.app.ProgressDialog;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;

public class KVOMeldingen extends ActivityGroup {

    public static final JSONObject jsonResult = null;
    Button bLogin, bCreateAccount, bResetPassword;
    EditText etUsername, etPassword;
    static String Username;
    static String Password;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.meldingen);
        final EditText etUsername = (EditText) findViewById(R.id.etUsername);
        final EditText etPassword = (EditText) findViewById(R.id.etPassword);
        Button bLogin = (Button) findViewById(R.id.bLogin);
        Button bCreateAccount = (Button) findViewById(R.id.bCreateAccount);
        Button bResetPassword = (Button) findViewById(R.id.bResetPassword);

        bLogin.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                if (etUsername.length() <= 0) {
                    etUsername.setError("Veld mag niet leeg zijn");
                } else if (etPassword.length() <= 0) {
                    etPassword.setError("Veld mag niet leeg zijn");
                } else {
                    Username = etUsername.getText().toString();
                    Password = etPassword.getText().toString();
                }
                LoginTask NDLT = new LoginTask();
                NDLT.execute();
            }
        });

        bCreateAccount.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {
                // Doe iets hier.......

            }

        });

        bResetPassword.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // Doe iets hier........

            }

        });

    }

    public static String getUsername() {
        return Username;
    }

    public static String getPassword() {
        return Password;
    }

    class LoginTask extends AsyncTask<Void, Void, JSONObject> {

        ProgressDialog waitingDialog;

        @Override
        protected void onPreExecute() {
            waitingDialog = new ProgressDialog(KVOMeldingen.this);
            waitingDialog.setMessage("Laden...");
            waitingDialog.show();
            super.onPreExecute();
        }

        @Override
        protected JSONObject doInBackground(Void... params) {

            JSONObject json = JsonFunctionLogin
                    .getJsonLoginResult("http://api.crossalertdeventer.nl/login.json");
            return json;

        }

        @Override
        protected void onPostExecute(JSONObject json) {
            super.onPostExecute(json);
            if (waitingDialog.isShowing()) {
                waitingDialog.dismiss();
                Log.d("iets gebeurt", "gedaan");
            }
            try {

                String LoginResult = json.getString("login");
                String UserIdResult = json.getString("user_id");
                Log.d("LoginResult", LoginResult);
                Log.d("LoginUserId", UserIdResult);
                json = null;
                Intent intent = new Intent(KVOMeldingen.this, KVOCards.class);

                View view = getLocalActivityManager().startActivity("KVOCards", intent
                                                .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP))
                                                .getDecorView();

                replaceView(view);


            } catch (Exception e) {
                Log.e("KVOMeldingen", "error" + e.getMessage());
            }

        }

        public void replaceView(View v){
            setContentView(v);
        }
    }

}

ご覧のとおり、Intent に表示されるビューを作成しました。しかし、インテントは onbackground の後に起動しません。それは私にエラーを与えます:

アクティビティ componentInfo を開始できません ウィンドウを追加できません...トークン.....が無効です... アプリケーションは実行されていますか?

私は何を間違っていますか?

事前にt​​hnx

4

1 に答える 1

1

新しいアクティビティを開始するということは、TabActivity から通常のアクティビティに移動していることを意味します。明らかに、アクティビティにタブが見つかりません。アクティビティを作成する代わりに、ビューを置き換える必要があります。

これは、TabActivity で ActivityGroup を使用する方法の良い例です。

http://web.archive.org/web/20100816175634/http://blog.henriklarsentoft.com/2010/07/android-tabactivity-nested-activities/

しかし、それでもこのアプローチは推奨されていません。ただし、フラグメントの使用を検討する必要があるかもしれません。

こちらをご覧ください。http://developer.android.com/resources/samples/Support4Demos/src/com/example/android/supportv4/app/FragmentTabs.html

于 2012-06-06T12:16:12.830 に答える