Android:将文本设置为复选框不起作用

时间:2019-06-10 09:04:08

标签: java android xml

我正在尝试从“编辑文本”中设置复选框的文本,但是它不起作用。

我已经创建了一个带有按钮的编辑文本,单击该按钮会创建一个复选框,并从编辑文本中获取复选框的文本。当我单击按钮时,应用程序崩溃。

XML

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:fillViewport="true">

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/rootContainer"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:orientation="vertical"
    tools:context=".MainActivity">


    <EditText
        android:id="@+id/new_task"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="New Task"
        android:inputType="textCapSentences" />

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:text="Create" />

</LinearLayout>

</ScrollView>

JAVA

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

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

    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            LinearLayout linearLayout = findViewById(R.id.rootContainer);
            EditText newTask = findViewById(R.id.text);

            CheckBox checkBox = new CheckBox(MainActivity.this);

            String task = newTask.getText().toString();
            newTask.setText(task);
            checkBox.setText(task);

            // Add Checkbox to LinearLayout
            if (linearLayout != null) {
                linearLayout.addView(checkBox);
            }

        }

    });

}

2 个答案:

答案 0 :(得分:0)

从onClick事件中删除以下行

LinearLayout linearLayout = findViewById(R.id.rootContainer);

并以onCreate()方法添加该行。

因为 linearLayout 是您的根容器。

您不需要每次都找到。

与按钮相同。

也有与问题相关的ID。 您正在text中找到ID,但在xml中提到了new_task

因此,下面一行应为EditText newTask = findViewById(R.id.new_task);

答案 1 :(得分:0)

您布局中的EditText的

idandroid:id="@+id/new_task"

在“活动”中您使用的

EditText newTask = findViewById(R.id.text);

因此,您应在Activity中使用与XML中相同的ID