gpt4 book ai didi

java - 在 Android Studio 中动态创建按钮时遇到问题

转载 作者:行者123 更新时间:2023-11-29 06:57:57 27 4
gpt4 key购买 nike

我是 Android 的新手,我不知道如何将按钮动态添加到预先存在的布局中。我将从 SO 上的另一个问题中找到的一些示例代码拼凑到一个 hello world 默认项目中。

onCreate 方法:

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

Button myButton = new Button(this);
myButton.setText("Add Me");

RelativeLayout ll = (RelativeLayout)findViewById(R.id.main_layout);
RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
ll.addView(myButton, lp);

setContentView(R.layout.activity_main);
}

布局:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:id="@+id/main_layout"
android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">

<TextView android:text="@string/hello_world" android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/textView" />

<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="1"
android:id="@+id/cat_1"
android:layout_below="@+id/textView"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_marginTop="26dp" />

<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="2"
android:id="@+id/cat_2"
android:layout_alignBottom="@+id/cat_1"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
android:layout_marginRight="65dp"
android:layout_marginEnd="65dp" />

</RelativeLayout>

当我注释掉添加按钮部分时,该项目有效,所以我知道这就是问题所在。我会粘贴一些调试信息,但 logcat 的“调试”过滤器非常冗长,即使程序没有运行也会不断更新。当我在 Debug模式下运行它时,手机会在出现“应用程序已停止工作”消息之前显示几分之一秒的错误。

最佳答案

setContentView 应该在 super 之后立即完成。否则任何时候你调用 findViewById 都会返回一个空指针。

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

Button myButton = new Button(this);
myButton.setText("Add Me");

RelativeLayout ll = (RelativeLayout)findViewById(R.id.main_layout);
RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
ll.addView(myButton, lp);
}

关于java - 在 Android Studio 中动态创建按钮时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31082760/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com