一种测试方向和布局更改的代码:
主 StartActivity 包含 3 个按钮(button1、button2、button3)和一个包含 Fragment 空间的衬垫布局。
当 button1 被点击时,fragment 会显示 fragment1;Button2 显示 fragment2 等。
纵向:(文件名-layout/activity_start.xml)
景观:(文件名-layout-land/activity_start.xml)
问题:
当我改变方向时,按钮的行为异常。他们在第一次点击时不起作用。只有在我单击两次之后,然后才能工作。
每次更改方向时都会创建此 StartActivity。(onCreate() 中的 Toast 弹出)
我只是希望当方向改变时:布局应该相应地改变,并且像按钮这样的活动的所有组件都应该按预期工作。并且不应重新创建活动。
代码:
开始活动.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>