有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java我可以在oncreate方法之外使用setContentView吗?

我见过很多人告诉我可以在oncreate方法之外设置setContentView,但我没有找到任何例子。现在,当我尝试使用setContentView时,我的应用程序崩溃了。以下是我的源代码:

警报活动。爪哇:

package com.alarm.example;

import 安卓.app.Activity;
import 安卓.os.Bundle;
import 安卓.view.View;
import 安卓.view.ViewGroup.LayoutParams;
import 安卓.widget.Button;
import 安卓.widget.RelativeLayout;

public class AlarmActivity extends Activity{
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Button buton = new Button(this);
        buton.setId(101);
        buton.setText("New alarm");
        buton.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT));
        RelativeLayout layout1 = new RelativeLayout(this);  
        layout1.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));  
    layout1.addView(buton);  
    setContentView(layout1); 

    Button nou =(Button)findViewById(101);
    nou.setOnClickListener(new View.OnClickListener(){
        @Override
        public void onClick(View v){
            New_ala nou1=new New_ala();
            nou1.nou_alarma();
            }
        });
    }
}

New_ala.java:

package com.alarm.example;

public class New_ala extends AlarmActivity{
public void nou_alarma() {
setContentView(R.layout.timepicker);        
}
}

时间选择器。xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:安卓="http://schemas.安卓.com/apk/res/安卓"
    安卓:layout_width="fill_parent"
    安卓:layout_height="fill_parent"
    安卓:orientation="vertical" >


    <TimePicker
        安卓:id="@+id/timePicker"
        安卓:layout_width="fill_parent"
        安卓:layout_height="wrap_content" />

    <LinearLayout 
        安卓:layout_height="wrap_content" 
        安卓:layout_width="fill_parent" 
        安卓:layout_alignParentBottom="true">

        <Button 
        安卓:id="@+id/picker_save" 
        安卓:layout_width="wrap_content" 
        安卓:layout_height="wrap_content" 
        安卓:layout_weight="1" 
        安卓:text="Save">
        </Button>

        <Button 
        安卓:id="@+id/picker_cancel" 
        安卓:layout_width="wrap_content" 
        安卓:layout_height="wrap_content"
        安卓:layout_weight="1" 
        安卓:text="Cancel">
        </Button>
</LinearLayout>

</LinearLayout>

更详细地说,我可以在oncreate方法中使用setContentView(R.layout.timepicker),而不会出现任何问题,因此问题在于setContentView在新的_ala.java类中无法正常工作。有人能帮我吗

设置意图后的代码: 报警活动:

package com.alarm.example;
import 安卓.app.Activity;
import 安卓.content.Intent;
import 安卓.os.Bundle;
public class AlarmActivity extends Activity{
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        startActivity(new Intent(this, NewAlarmActivity.class));
        }
    }

新警报活动:

package com.alarm.example;
import 安卓.os.Bundle;
public class NewAlarmActivity extends AlarmActivity{

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.timepicker);
}
    }

共 (2) 个答案

  1. # 1 楼答案

    在事件(UI)线程上运行时,可以随时调用setContentView。请注意,当您这样做时,任何通过调用findViewById初始化的字段都需要重置

  2. # 2 楼答案

    最好的方法是有多个活动:而不是nou1.nou_alarma();,创建一个意图并用新的布局开始一个新的活动

    startActivity(new Intent(this, NewAlarmActivity.class));
    

    NewAlarmActivityonCreate方法中,将内容视图设置为R.layout.timepicker