问题是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作为更改的布局。
答案 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文件,其中指定了布局,在系统确定需要它们之前,也不会创建这些元素的实际对象,这在您实际尝试显示视图时会发生。