0

一种测试方向和布局更改的代码:

主 StartActivity 包含 3 个按钮(button1、button2、button3)和一个包含 Fragment 空间的衬垫布局。

当 button1 被点击时,fragment 会显示 fragment1;Button2 显示 fragment2 等。

纵向:(文件名-layout/activity_start.xml)

在此处输入图像描述

景观:(文件名-layout-land/activity_start.xml) 在此处输入图像描述

问题:

  1. 当我改变方向时,按钮的行为异常。他们在第一次点击时不起作用。只有在我单击两次之后,然后才能工作。

  2. 每次更改方向时都会创建此 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>
4

1 回答 1

0

您的根 LinearLayout 是水平的,它包含另一个垂直的 LinearLayout。

因此,您的按钮在水平排列的 LinearLayout 中堆叠在一起。

只需将内部布局更改为水平。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/LinearLayout1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/Snow"
    android:orientation="horizontal"
    tools:context=".StartActivity" >

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:gravity="top"
        android:orientation="vertical" >      <----- HERE
于 2013-03-31T19:56:53.193 回答