【问题标题】:Buttons in activity not working properly on orientation change活动中的按钮在方向更改时无法正常工作
【发布时间】: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)

问题:

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

  2. 每次更改方向时都会创建此 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()。这会给您留下一些大多数缺乏经验的开发人员甚至都不知道的错误,更不用说修复了。阅读活动生命周期文档,然后回来。你要么已经解决了你的问题,要么有一个不同的问题。
  • 顺便说一句,最直接的问题就是您的横向布局需要修复,而您还没有证明这一点,所以我们无能为力。
  • 请编辑您的问题。您显示的清单和代码不相关,因此您可以将其删除。只需显示横向布局 XML。抱歉,但我不会通过链接查看代码。这不是 SO 的工作方式。
  • @Simon 已编辑.. 已添加横向布局 xml

标签: android android-layout


【解决方案1】:

您的根 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

【讨论】:

  • 不...我只希望他们像这样安排。我展示的图像是我的预期布局和布局渲染工作正常。但按钮不是。
  • 对不起,我误解了这个问题 - 或者实际上,我没有正确阅读它。我再看一下代码。
猜你喜欢
  • 2012-01-22
  • 1970-01-01
  • 2022-08-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多