我有两个Android活动,两个都有一个按钮。
活动DetailsActivity
是我的MAIN
活动。
public class DetailsActivity extends Activity {
@Override
public void onCreate(Bundle bundle) {
super.onCreate(bundle);
setContentView(R.layout.details_activity_layout);
}
@Override
public void onResume() {
super.onResume();
}
public void gotoSubDetails(View view) {
Intent intent = new Intent(this, SubDetailsActivity.class);
startActivity(intent);
finish();
}
}
我的SubDetailsActivity
如下:
public class SubDetailsActivity extends Activity {
@Override
public void onCreate(Bundle bundle) {
super.onCreate(bundle);
setContentView(R.layout.sub_details_activity_layout);
}
@Override
public void onResume() {
super.onResume();
}
public void gotoDetails(View view) {
Intent intent = new Intent(this, DetailsActivity.class);
startActivity(intent); // Restarting the finish()ed activity here.
finish();
}
}
这就是我在details_activity_layout.xml
DetailsActivity.java
中提到我的按钮的方式:
<Button android:id="@+id/details_submit"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/to_sub_details"
android:onClick="gotoSubDetails" />
这就是我在sub_details_activity_layout.xml
SubDetailsActivity.java
中提到我的按钮的方式:
<Button android:id="@+id/sub_details_submit"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/back_to_details"
android:onClick="gotoDetails" />
这是我在AndroidManifest.xml
中的两项活动:
<activity android:name="DetailsActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name="SubDetailsActivity">
</activity>
当我点击button
中的DetailsActivity
时,活动finish()
正确且SubDetailsActivity
启动。
但是,当我点击button
中的SubDetailsActivity
以返回finish()
ed DetailsActivity
时,应用程序会立即在我的LG L90手机上崩溃。
我哪里错了?有帮助吗?请。
PS:
我无法发布日志报告,因为我没有在我的Mac上测试它,而是直接在我的手机上测试。我没有模拟器。我正在编译终端上的代码,并通过蓝牙传输手机上的.apk
文件。
修改: 好,朋友们。现在这真的很有趣!
我删除了
android:onClick="gotoSubDetails"
和
android:onClick="gotoDetails"
分别来自details_activity_layout.xml
和sub_details_activity_layout.xml
。我在android.widget.Button
和DetailsActivity.java
加载了SubDetailsActivity.java
,并在其中添加了android.view.View.OnClickListener
并覆盖了onClick(View)
方法。
这就是我在DetailsActivity.java
中所做的:
public class DetailsActivity extends Activity {
@Override
public void onCreate(Bundle bundle) {
super.onCreate(bundle);
setContentView(R.layout.details_activity_layout);
Button button = (Button)findViewById(R.id.details_submit);
button.setOnClickListener(new DetailsSubmitListener());
}
@Override
public void onResume() {
super.onResume();
}
public class DetailsSubmitListener implements OnClickListener {
@Override
public void onClick(View view) {
Intent intent = new Intent(this, SubDetailsActivity.class);
startActivity(intent);
finish();
}
}
}
这就是我在SubDetailsActivity.java
课程中所做的:
public class SubDetailsActivity extends Activity {
@Override
public void onCreate(Bundle bundle) {
super.onCreate(bundle);
setContentView(R.layout.details_activity_layout);
Button button = (Button)findViewById(R.id.sub_details_submit);
button.setOnClickListener(new SubDetailsSubmitListener());
}
@Override
public void onResume() {
super.onResume();
}
public class SubDetailsSubmitListener implements OnClickListener {
@Override
public void onClick(View view) {
Intent intent = new Intent(this, DetailsActivity.class);
startActivity(intent);
finish();
}
}
}
这奇迹般地工作正常。
那么我的布局文件中的.xml
属性有什么问题?它与我.java
文件中的硬编码监听器有何不同?这件事让我很困惑。 finish()
ed活动可以重新开始。这就是我在程序中的变化所发现的。请详细说明这方面的知识。
答案 0 :(得分:2)
阿迪蒂亚,
如果您想在两个活动之间进行遍历,就像在您的情况下一样,您永远不应该完成详细信息活动。而不是完成详细信息活动,启动SubDetails活动。如果你想回来,不需要编码。如果用户按下BACK按钮,SubDetails Activity将完成,DetailsActivity将到达前台。
完成一项活动并重新启动它是不必要的开销。躲开它。如果绝对必要,请完成活动。
此外,没有任何方法可以重新启动已完成的活动。
答案 1 :(得分:0)
就像哈利回答一样,
我想为你添加一些东西。如果您正在为更高的API级别(例如Android API 13+)进行编程,则可以定义父级活动。
这样您就不需要进行如此复杂的实施。
供参考
答案 2 :(得分:0)
我想你应该读这个!:
http://developer.android.com/guide/components/tasks-and-back-stack.html
我认为你在andriodManifest中为你的活动宣布launchMode是非常重要的!应该有问题。仔细阅读什么是任务以及android中的后台堆栈是如何工作的。
也许您正在完成任务,但同时您正在查看同一任务中的下一个活动!重新打开后,我认为它因此而坠毁。希望它有所帮助。