活动中的按钮在方向更改时无法正常工作

时间:2013-03-31 18:24:09

标签: android android-layout

一个测试方向代码&布局变化:

主StartActivity包含3个按钮(button1,button2,button3)&包含片段空间的线性布局。

单击button1时,片段显示fragment1; Button2显示了fragment2等。

肖像 :(文件名 - 布局/ activity_start.xml)

enter image description here

格局 :(文件名 - layout-land / activity_start.xml) enter image description here

的问题:

  1. 当我改变方向时,按钮表现异常。他们第一次点击不工作。只有在我点击两次后才能完成工作。

  2. 每次更改方向时都会创建此StartActivity。 (onCreate()中的吐司加速(

  3. 我只是想在方向改变时:布局应相应改变&活动的所有组件(如按钮)应按预期工作。 并且不应该重新创建活动。

    代码:

    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>
    

1 个答案:

答案 0 :(得分: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