触摸EditText后,ListView跳出屏幕

时间:2018-07-26 20:38:17

标签: android listview android-edittext android-softkeyboard android-imagebutton

我正在制作一个简单的待办事项列表应用程序,以学习如何开发Android应用程序。
首先,我有一个EditText,一个普通的Button和一个ListView。一切都很好,我可以添加和删除任务。比我想用ImageButton替换Button。我做了同样的约束。现在,当我触摸EditText时,我的ListView就跳起来并跳出屏幕,但是它的一部分仍在覆盖我的ImageButton的屏幕上,所以我不能再使用它了。但是,如果我按下软键盘上的“确定”,则ListView将回跳,然后我可以再次使用ImageButton添加任务。我在做什么错了?

activity-main.xml:

xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">

<EditText
    android:id="@+id/editText"
    android:layout_width="255dp"
    android:layout_height="wrap_content"
    android:layout_marginLeft="8dp"
    android:layout_marginStart="8dp"
    android:layout_marginTop="8dp"
    android:ems="10"
    android:hint="@string/editTextHint"
    android:inputType="textPersonName"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent" />

<ImageButton
    android:id="@+id/addButton"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginEnd="8dp"
    android:layout_marginLeft="8dp"
    android:layout_marginRight="8dp"
    android:layout_marginStart="8dp"
    android:layout_marginTop="8dp"
    android:contentDescription="@string/addTaskButton"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintHorizontal_bias="1.0"
    app:layout_constraintStart_toEndOf="@+id/editText"
    app:layout_constraintTop_toTopOf="parent"
    app:srcCompat="@android:drawable/ic_input_add" />

<ListView
    android:id="@+id/listView"
    android:layout_width="365dp"
    android:layout_height="428dp"
    android:layout_marginBottom="8dp"
    android:layout_marginTop="8dp"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/editText" />

MainActivity.java:

ListView lv;
ArrayList<Task> taskList;
TaskArrayAdapter taskAdapter;
EditText editText;
ImageButton btn;

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

    lv = findViewById(R.id.listView);
    editText = findViewById(R.id.editText);
    btn = findViewById(R.id.addButton);

    taskList = new ArrayList<>();
    handleButton();
    taskAdapter = new TaskArrayAdapter(taskList, this);
}

public void handleButton() {
    btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            editText.onEditorAction(EditorInfo.IME_ACTION_DONE);
            taskList.add(new Task(editText.getText().toString()));
            lv.setAdapter(taskAdapter);
            taskAdapter.notifyDataSetChanged();
            editText.setText(null);
        }
    });
}

@Override
public void onCheckedChanged(CompoundButton checkedTask, boolean isChecked) {
    int position = lv.getPositionForView(checkedTask);

    Task t = taskList.get(position);
    t.setSelected(isChecked);

    taskList.remove(t);
    lv.setAdapter(taskAdapter);
    taskAdapter.notifyDataSetChanged();
}

}

是的,我是编码的新手,所以如果我犯了其他一些错误,请告诉我。谢谢:)

1 个答案:

答案 0 :(得分:0)

<android.support.constraint.ConstraintLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <EditText
        android:id="@+id/et_task"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintEnd_toStartOf="@+id/btn_add"
        android:hint="Enter task"
        />

    <Button
        android:id="@+id/btn_add"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="+"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        />

    <ListView
        android:layout_width="match_parent"
        android:layout_height="100dp"
        app:layout_constraintTop_toBottomOf="@+id/et_task"
        app:layout_constraintEnd_toStartOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        />

</android.support.constraint.ConstraintLayout>