gpt4 book ai didi

Android Childactivity getParent 问题?

转载 作者:行者123 更新时间:2023-11-30 04:34:45 26 4
gpt4 key购买 nike

基本上我在我的应用程序中使用 ActivityGroup。我有这种情况:

我有 Activity A 的 Tabhost。

Activity A 创建 childActivity B。

A  --->  B

startChildActivity("CollectionList", new Intent(this,MyCollectionList.class));

Activity B 创建了 3 个子 Activity C、D。

B  ---> C (childActivity of B)
startChildActivity("Recommended", new Intent(MyCollectionList.this,Recommended.class));


B ---> D (childActivity of B)
startChildActivity("ExpectSoon", new Intent(MyCollectionList.this,ExpectSoon.class));

B也创建了另一个childActivity,命名为E。

B  ---> E
Intent previewMessage = new Intent(getParent(), MyCollectionId.class);
TabGroupActivity parentActivity = (TabGroupActivity)getParent();
parentActivity.startChildActivity("MyCollectionId", previewMessage);

所以基本上 Activity C 和 D 也可以启动 Activity E,使用:

            Intent previewMessage = new Intent(getParent(), MyCollectionId.class);
TabGroupActivity parentActivity = (TabGroupActivity)getParent();
parentActivity.startChildActivity("MyCollectionId", previewMessage);

我重写了 onBackPressed 方法,所以我可以控制后退按钮。它看起来像这样:

    private ArrayList<String> mIdList;

@Override
public void onBackPressed () {
int length = mIdList.size();
if ( length >=1) {
Activity current = getLocalActivityManager().getActivity(mIdList.get(length-1));
current.finish();
}
}

所以我的问题是,当我在 Activity E 中并按下后退按钮时,我的应用程序关闭。我遇到的另一个问题是 Activity E 中的警报对话框。

Button deactivate = (Button) findViewById(R.id.deactivate);
deactivate.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
new AlertDialog.Builder( getParent() )
.setTitle( "Warning" )
.setMessage( "The collection will be removed completely from the device.You can reactivate it later again.This operation requires internet connection." )
.setPositiveButton( "Go ahead", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
Log.d("AlertDialog", "Positive");
}
})
.setNegativeButton( "Cancel", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
Log.d("AlertDialog","Negative");
}
})
.show();

}

});

当我从 A 启动 Activity E 时,当我单击将显示警报对话框的按钮时,一切正常。但是当我从 C 或 D 启动 Activity E 时,它会抛出异常:

08-15 15:48:22.819: ERROR/AndroidRuntime(32440): FATAL EXCEPTION: main
08-15 15:48:22.819: ERROR/AndroidRuntime(32440): android.view.WindowManager$BadTokenException: Unable to add window -- token android.app.LocalActivityManager$LocalActivityRecord@4630ea20 is not valid; is your activity running?
08-15 15:48:22.819: ERROR/AndroidRuntime(32440): at android.view.ViewRoot.setView(ViewRoot.java:509)
08-15 15:48:22.819: ERROR/AndroidRuntime(32440): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:177)
08-15 15:48:22.819: ERROR/AndroidRuntime(32440): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91)
08-15 15:48:22.819: ERROR/AndroidRuntime(32440): at android.view.Window$LocalWindowManager.addView(Window.java:424)
08-15 15:48:22.819: ERROR/AndroidRuntime(32440): at android.app.Dialog.show(Dialog.java:241)
08-15 15:48:22.819: ERROR/AndroidRuntime(32440): at android.app.AlertDialog$Builder.show(AlertDialog.java:802)
08-15 15:48:22.819: ERROR/AndroidRuntime(32440): at com.stampii.stampii.mystampii.MyCollectionId$4.onClick(MyCollectionId.java:75)
08-15 15:48:22.819: ERROR/AndroidRuntime(32440): at android.view.View.performClick(View.java:2408)
08-15 15:48:22.819: ERROR/AndroidRuntime(32440): at android.view.View$PerformClick.run(View.java:8817)
08-15 15:48:22.819: ERROR/AndroidRuntime(32440): at android.os.Handler.handleCallback(Handler.java:587)
08-15 15:48:22.819: ERROR/AndroidRuntime(32440): at android.os.Handler.dispatchMessage(Handler.java:92)
08-15 15:48:22.819: ERROR/AndroidRuntime(32440): at android.os.Looper.loop(Looper.java:144)
08-15 15:48:22.819: ERROR/AndroidRuntime(32440): at android.app.ActivityThread.main(ActivityThread.java:4937)
08-15 15:48:22.819: ERROR/AndroidRuntime(32440): at java.lang.reflect.Method.invokeNative(Native Method)
08-15 15:48:22.819: ERROR/AndroidRuntime(32440): at java.lang.reflect.Method.invoke(Method.java:521)
08-15 15:48:22.819: ERROR/AndroidRuntime(32440): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
08-15 15:48:22.819: ERROR/AndroidRuntime(32440): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
08-15 15:48:22.819: ERROR/AndroidRuntime(32440): at dalvik.system.NativeStart.main(Native Method)

编辑:

我的 startChildActivity 看起来像这样:

public void startChildActivity(String Id, Intent intent) {     
Window window = getLocalActivityManager().startActivity(Id,intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP));
if (window != null) {
mIdList.add(Id);
setContentView(window.getDecorView());
}

最新的 LogCat,同时在 ActivityE 中使用 Recommended.parentActivity:

        new AlertDialog.Builder( Recommended.parentActivity )


08-15 16:33:53.509: ERROR/AndroidRuntime(1967): FATAL EXCEPTION: main
08-15 16:33:53.509: ERROR/AndroidRuntime(1967): java.lang.NullPointerException
08-15 16:33:53.509: ERROR/AndroidRuntime(1967): at com.android.internal.app.AlertController$AlertParams.<init>(AlertController.java:743)
08-15 16:33:53.509: ERROR/AndroidRuntime(1967): at android.app.AlertDialog$Builder.<init>(AlertDialog.java:273)
08-15 16:33:53.509: ERROR/AndroidRuntime(1967): at com.stampii.stampii.mystampii.MyCollectionId$4.onClick(MyCollectionId.java:62)
08-15 16:33:53.509: ERROR/AndroidRuntime(1967): at android.view.View.performClick(View.java:2408)
08-15 16:33:53.509: ERROR/AndroidRuntime(1967): at android.view.View$PerformClick.run(View.java:8817)
08-15 16:33:53.509: ERROR/AndroidRuntime(1967): at android.os.Handler.handleCallback(Handler.java:587)
08-15 16:33:53.509: ERROR/AndroidRuntime(1967): at android.os.Handler.dispatchMessage(Handler.java:92)
08-15 16:33:53.509: ERROR/AndroidRuntime(1967): at android.os.Looper.loop(Looper.java:144)
08-15 16:33:53.509: ERROR/AndroidRuntime(1967): at android.app.ActivityThread.main(ActivityThread.java:4937)
08-15 16:33:53.509: ERROR/AndroidRuntime(1967): at java.lang.reflect.Method.invokeNative(Native Method)
08-15 16:33:53.509: ERROR/AndroidRuntime(1967): at java.lang.reflect.Method.invoke(Method.java:521)
08-15 16:33:53.509: ERROR/AndroidRuntime(1967): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
08-15 16:33:53.509: ERROR/AndroidRuntime(1967): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
08-15 16:33:53.509: ERROR/AndroidRuntime(1967): at dalvik.system.NativeStart.main(Native Method)

最佳答案

你可以做一件事在 ActivityA.java 中

public static Activity parentActivity;

onCreate()
{
parentActivity=this;
}
// start your child activity ie(E)

ActivityE.java

Button deactivate = (Button) findViewById(R.id.deactivate);
deactivate.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
new AlertDialog.Builder( ActivityA.parentActivity.this )
.setTitle( "Warning" )
.setMessage( "The collection will be removed completely from the device.You can reactivate it later again.This operation requires internet connection." )
.setPositiveButton( "Go ahead", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
Log.d("AlertDialog", "Positive");
}
})
.setNegativeButton( "Cancel", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
Log.d("AlertDialog","Negative");
}
})
.show();

}

});

关于Android Childactivity getParent 问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7065108/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com