gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 18:18:51 24 4
gpt4 key购买 nike

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

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