如果方向改变则更改布局,使用按钮更改错误

时间:2014-03-06 02:23:17

标签: android onconfigurationchanged

我使用onConfigurationChanged方法来了解方向何时发生变化。但是,当我打电话给其他布局时按钮不起作用。

这是我的代码:

IntroPage.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);


    }



    }

我在清单xml中写android:configChanges="orientation|screenSize"。请有人帮帮我...按钮无法正常工作我能做些什么?

2 个答案:

答案 0 :(得分:0)

尽管这不是推荐的处理方法,但建议您在执行setContentView(R.layout.intropage_landscape);

之后再次添加这两行
btnlogin = (Button)findViewById(R.id.btnlogin); 
btnlogin.setOnClickListener(this);

推荐方式是:

  1. 不要为每个方向致电setContentView。在setContentView中调用onCreate一次,并初始化所有UI元素。
  2. 然后重复使用常用UI元素进行方向
  3. 如果存在一些非常见的UI元素,则根据需要使用片段进行添加和删除。
  4. 希望这有帮助。

答案 1 :(得分:0)

您希望获得有关方向更改的通知,但保留不同方向的不同布局。代码中的问题很明显 - setContentView设置新的ui对象并使用clicklisteners删除旧的对象。
建议:
- 从您的活动中删除configChanges标志 - 这样您的活动将在每次轮换后创建,
- 在你的onCreate get current screen orientation中,与之前的值(存储在savedInstanceState中)进行比较
- 并将其保存在onSaveInstanceState中(onCreate将在方向更改后收到已保存的包);
- 还为different orientations放置了活动布局xml文件。