10

A と B の 2 つのアクティビティがあります。B は透明なパススルー アクティビティで、A は見られます。ボタンAを押してBを殺したい。

これが私がこれまでに試したことです:

B obj=new B();
obj.finish();

B のオブジェクトを作成し、それを殺そうとしました。それはうまくいきませんでした。

intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                intent.putExtra("keep", true);
                startActivity(intent);

このコードが行うことになっているのは、最上位のアクティビティである B をクリアし、B を再度呼び出すことです。ただし、今回は、B が数秒後に自分自身を殺すような値を渡しています。

これは、何らかの理由でアクティビティのインスタンスをさらに積み上げただけです。または、少なくとも、多くの透明なアクティビティにより画面がピクセル化されたため、それが起こったと思います.

これが私のマニフェストです:

<activity
        android:name="com.xxx.xxx.B"
        android:excludeFromRecents="true"
        android:theme="@android:style/Theme.Translucent.NoTitleBar"
        android:clearTaskOnLaunch="true" >
    </activity>

アクティビティが表示されたときにボタンを押して、2回目にそれを殺すにはどうすればよいですか? 作成部分は明らかに処理されます。アクティビティ B がポップアップします。B が一番上にあるので、それを削除したいと思います。

編集

チェックボックスでこれを試しました。コードは次のとおりです。

enable.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View arg0) {
            // TODO Auto-generated method stub
            finishActivity(0);
            Intent intent = new Intent(A.this, B.class);
            if (enable.isChecked()) {
                intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                intent.putExtra("keep", true);
                intent.putExtra("value", 10);
                startActivityForResult(intent, 0);
            }
            else
            {
                intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                intent.putExtra("keep", false);
                startActivityForResult(intent, 0);
            }
        }
    });

有効にすると、アクティビティが呼び出され、正常に動作します。しかし、彼らは積み上げ続けます。チェックボックスにチェックを入れたり外したりしても、A->B->A->B のようにはいきません。A→B→BB→BBBです。

4

5 に答える 5

50

そのアクティビティで静的メソッドを呼び出すことにより、アクティビティを直接強制終了することができます。

アクティビティ A には変数が必要です

 static ActivityA activityA;

onCreate 状態:

 activityA = this;

このメソッドを追加します。

public static ActivityA getInstance(){
   return   activityA;
 }

アクティビティ B で、関数 getInstance() を呼び出します。

ActivityA.getInstance().finish();     
于 2013-01-16T10:58:41.413 に答える
0

ある活動を別の活動から終える良い方法を見つけました。これはルミスがしたことと似ています。したがって、ActivityB から ActivityA を閉じたい場合は、次のようにします。

ActivityA で次のことを行います。

className = this.getClass().getName();

AvtivityB に渡します。次に、ActivityB で次のことを行います。

((Activity) Class.forName(className).newInstance()).finish();

クラスの名前を含む文字列を自分で className に入れることができますが、パッケージもフルネームにする必要があります。

于 2013-05-08T10:43:29.123 に答える
-1

Activity.finish()を呼び出すことで、他のアクティビティを停止できます。または、 Activity.finishActivity()を使用して、startActivityForResult() によって開始されたアクティビティを終了することもできます。

于 2013-01-16T10:19:05.843 に答える