我是 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/