android - 简单的待办事项列表示例在 Android 上不起作用

标签 android list

我是 Android 的新手,我一直在阅读 Wrox 出版社的 Professional Android 2 Application Development 一书。第一个教程是一个简单的待办事项列表,它只是一个接一个地添加项目(它不保存信息或类似的东西,稍后会讲到)。我遇到的问题是它不仅打印我写的东西,它还添加了一个空项目,就像这样(抱歉,我没有超过 10 个声誉,所以我不能发布图片。希望你能得到想法):


(空步)


第二个任务


(空白)


第一个任务


书中和网页上出现的代码 here是一样的,勘误部分没有确认错误:

package com.paad.todoList;

import java.util.ArrayList;
import android.app.Activity;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.view.View.OnKeyListener;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.ListView;

public class Todo_ListActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    //Get references to UI widgets
    ListView myListView = (ListView) findViewById(R.id.myListView);
    final EditText myEditText = (EditText)findViewById(R.id.myEditText);

    //Creates the array list of to do items
    final ArrayList <String> todoItems = new ArrayList <String>();

    //Create the array adapter to bind the array to the listview
    final ArrayAdapter <String> aa;
    aa = new ArrayAdapter <String> (this, android.R.layout.simple_list_item_1, todoItems);

    //Bind the array adapter to the listview
    myListView.setAdapter(aa);

    myEditText.setOnKeyListener (new OnKeyListener(){
        public boolean onKey (View v, int keyCode, KeyEvent event){
            if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER){
                todoItems.add(0, myEditText.getText().toString());
                aa.notifyDataSetChanged();
                myEditText.setText("");
                return true;
            }
            else return false;
        }
    });
    }
}

我的 main.xml 是这样的:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <EditText
        android:id="@+id/myEditText"
        android:layout_width="fill_parent"
            android:layout_height="wrap_content"
        android:text="New To Do Item"
    />
<ListView
    android:id="@+id/myListView"
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    />
</LinearLayout>

我知道错误来自这一行:

myEditText.setText("");

如果我注释掉该行,那么程序会添加两倍于我所写的内容:

   Second Task

   Second Task

   First Task

   First Task

如果我在引号内添加一些东西......

myEditText.setText("Error");

然后它也打印它:

Error

Second task

Error

First Task

我查阅了 Android API,但找不到解决方案。有人可以帮我吗?我怎样才能用它代替有效的东西?

最佳答案

每次按下一个键时都会调用 2 个事件:一个 KEY_DOWN,然后是一个 KEY_UP 事件。在你的代码中,你不过滤那些,所以它只为 2 触发。第一个在 editText 中有文本,而第二个在 editText 的文本被刷新后触发。

您可以在您的 onKey 方法中添加如下内容:

if (event.getAction()!=KeyEvent.ACTION_DOWN)
     return true;

这将确认按键按下事件,但您不会对其执行任何操作。然后,当 up 键出现时,您将使用它。

关于android - 简单的待办事项列表示例在 Android 上不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6635016/

相关文章:

java - 无法解析方法 show(android.support.v4.app FragmentManager,java.lang.string)

android - 让一个 View 环绕另一个 View

c# - 如何清除嵌套 List<T> 的值?

python - 将字典内的列表更改为集合?

java - 由于某种原因确定字符串是否为空需要 2 个参数

android - 将数据存储到 sdcard 的问题

Android 媒体播放器分贝读数

python - 如何实现位置感知项的 python 列表

python - 如何关联两个列表?

r - 将所有 data.table 行转换为列表 R