设置另一个布局的按钮时出现问题

时间:2015-10-26 18:31:09

标签: android

问题是MainActivity以带有layout.xml的setContentView开始。我们可以在MainActivity类中为布局和代码添加按钮或任何东西,但是当我尝试在同一个Activity中编码另一个布局的按钮时,app强制停止。怎么了?

好的,我发现这是因为背景。 当您尝试更改其他活动时,您必须使用layoutinflater。以下示例

LayoutInflater inflater = getLayoutInflater();
View myLayout = inflater.inflate(R.layout.my_layout, null); 

使用按钮或任何内容中的小部件。

Button b = mylayout.findViewById(R.id.button);

b.setText("Successfully changed");

现在您可以使用myLayout作为更改的布局。

2 个答案:

答案 0 :(得分:0)

请将您的活动发给我 什么问题的文字?

您可以编写下一个代码以转到另一个活动

button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
              startActivity(new Intent(getApplicationContext(),nameActivity.class));
            }
        });

其中按钮是按钮的名称

看到你xml文件没有任何错误

答案 1 :(得分:0)

您正在崩溃,因为您试图在未充气时访问该布局。换句话说,您必须在活动上调用setContentView(),或在片段上调用inflater.inflate()来实例化视图并使元素可供操作。因此,如果您要将按钮添加到其他活动,则需要先调用其onCreate()setContentView(),然后才能向其添加按钮。

编辑:回复评论......

为了在运行时访问/操作/修改布局中的元素,必须首先实例化它们,这在视图膨胀时发生。因此,要在运行时向Activity添加按钮,您可以在调用onCreate()之后使用setContentView()方法执行此操作:

请记住,这是您的SECOND活动的onCreate() ...而不是您的主要活动。因此,您的主要活动将启动此活动,然后在设置第二个活动期间创建按钮。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.your_second_activity;

    Button button = new Button(this);
    button.setText("Your New Button");

    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Log.d("NEW BUTTON", "I just clicked my new button!");
        }
    });

    RelativeLayout relativeLayout = (RelativeLayout) findViewById(R.id.layout_in_your_second_activity);
    relativeLayout.addView(button);
}

如果您使用片段来显示您的UI,那么在您夸大布局之前,您无法访问UI元素,这在onCreateView()方法中会发生。所以你会在你的片段代码中做这样的事情:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

    View view = inflater.inflate(R.layout.your_fragment_layout, container, false);
    RelativeLayout relativeLayout = (RelativeLayout) view.findViewById(R.id.container_layout_that_holds_button);

    //You would get your context from an onAttach() Override
    Button button = new Button(context);
    button.setText("Your New Button");
    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Log.d("NEW BUTTON", "I just clicked my new button!");
        }
    });

    relativeLayout.addView(button);

    return view;
}

当您尝试在创建布局之前操作布局时,可能会获得NullPointerException。请记住,即使您有一个XML文件,其中指定了布局,在系统确定需要它们之前,也不会创建这些元素的实际对象,这在您实际尝试显示视图时会发生。