0

我用onConfigurationChanged方法知道方向何时改变。但是,当我调用其他布局时,按钮不起作用。

这是我的代码:

介绍页.java

package com.example.mysqltest;

import android.app.Activity;
import android.content.Intent;
import android.content.res.Configuration;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.widget.Button;
import android.widget.Toast;

public class IntroPage extends Activity implements OnClickListener {

    private Button btnlogin;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.intropage);


        btnlogin = (Button)findViewById(R.id.btnlogin); 

        btnlogin.setOnClickListener(this);

    }
    // Check screen orientation or screen rotate event here
    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        setContentView(R.layout.intropage);

        // Checks the orientation of the screen for landscape and portrait
        if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
            setContentView(R.layout.intropage_landscape);
            Toast.makeText(this, "landscape", Toast.LENGTH_SHORT).show();

        } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){
            Toast.makeText(this, "portrait", Toast.LENGTH_SHORT).show();

        }
    }   




    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        Intent i = new Intent(IntroPage.this, Login.class);
        startActivity(i);


    }



    }

我写android:configChanges="orientation|screenSize"在我的清单 xml 中。请有人帮助我......我可以用按钮不工作做什么?

4

2 回答 2

0

看起来您希望收到有关方向更改的通知,但为不同的方向保留不同的布局。您的代码中的问题很明显 - setContentView 设置新的 ui 对象并使用它们的 clicklisteners 删除旧的对象。
建议:
- 从您的活动中删除 configChanges 标志 - 这样您的活动将在每次旋转后创建,
- 在您的 onCreate 中获取当前屏幕方向,与之前的值(存储在 savedInstanceState 中)进行比较
- 并将其保存在onSaveInstanceState中(onCreate 将收到已保存方向改变后的捆绑);- 还为不同的方向
放置活动布局 xml 文件。

于 2014-03-06T14:49:26.210 回答
0

尽管这不是处理此问题的推荐方法,但一个快速的建议是在您完成后再次添加这两行setContentView(R.layout.intropage_landscape);

btnlogin = (Button)findViewById(R.id.btnlogin); 
btnlogin.setOnClickListener(this);

推荐的方式是:

  1. 不要要求setContentView每个方向。调用setContentView一次onCreate并初始化所有 UI 元素。
  2. 然后为两个方向重新使用常见的 UI 元素
  3. 如果有一些不常见的 UI 元素,则根据需要使用片段添加和删除。

希望这可以帮助。

于 2014-03-06T04:26:14.680 回答