【发布时间】:2013-03-31 18:24:09
【问题描述】:
一个测试方向和布局更改的代码:
主 StartActivity 包含 3 个按钮(button1、button2、button3)和一个包含 Fragment 空间的衬垫布局。
当 button1 被点击时,fragment 会显示 fragment1; Button2 显示 fragment2 等。
纵向:(文件名-layout/activity_start.xml)
横向:(文件名-layout-land/activity_start.xml)
问题:
当我改变方向时,按钮的行为异常。他们在第一次点击时不起作用。只有在我单击两次之后,然后才能工作。
每次更改方向时都会创建此 StartActivity。 (onCreate() 中的 Toast 会弹出)
我只是希望当方向改变时:布局应该相应地改变,并且像按钮这样的活动的所有组件都应该按预期工作。 并且不应重新创建活动。
代码:
StartActivity.java
public class StartActivity extends FragmentActivity {
private static final String TAG = "StartActivity";
private Fragment newFragment;
private Button b1, b2, b3;
@Override
protected void onCreate(Bundle savedInstanceState) {
try {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_start);
Toast.makeText(this, "onCreate", Toast.LENGTH_SHORT).show();
b1 = (Button) findViewById(R.id.button1);
b2 = (Button) findViewById(R.id.button2);
b3 = (Button) findViewById(R.id.button3);
b1.setOnClickListener(buttonClickListener);
b2.setOnClickListener(buttonClickListener);
b3.setOnClickListener(buttonClickListener);
FragmentManager fm = this.getSupportFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
StartFragment startFragment = new StartFragment();
ft.add(R.id.selectedfragment, startFragment);
ft.commit();
} catch (Exception e) {
Log.e(TAG, e.toString());
}
}
private OnClickListener buttonClickListener = new OnClickListener() {
@Override
public void onClick(View view) {
try {
switch (view.getId()) {
case R.id.button1:
newFragment = new Fragment1();
break;
case R.id.button2:
newFragment = new Fragment2();
break;
case R.id.button3:
newFragment = new Fragment3();
break;
default:
newFragment = new StartFragment();
break;
}
FragmentManager fm = getSupportFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
ft.replace(R.id.selectedfragment, newFragment);
ft.addToBackStack(null);
ft.commit();
} catch (Exception e) {
Log.e(TAG, e.toString());
}
}
};
}
Manifest.xml 部分
<activity
android:name="com.ri.fragmenttest.StartActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
【问题讨论】:
-
可以阻止您的 Activity 被销毁,但请忽略任何建议您这样做的人。问题是,如果这样做,您将无法学习如何使用 Activity 生命周期,反过来,您将无法正确使用
onCreate()、onResume()和onPause()。这会给您留下一些大多数缺乏经验的开发人员甚至都不知道的错误,更不用说修复了。阅读活动生命周期文档,然后回来。你要么已经解决了你的问题,要么有一个不同的问题。 -
顺便说一句,最直接的问题就是您的横向布局需要修复,而您还没有证明这一点,所以我们无能为力。
-
@Simon 代码上传@github.com/rahulsaini8/FragmentTest
-
请编辑您的问题。您显示的清单和代码不相关,因此您可以将其删除。只需显示横向布局 XML。抱歉,但我不会通过链接查看代码。这不是 SO 的工作方式。
-
@Simon 已编辑.. 已添加横向布局 xml