2011-07-09 13 views
1

私はAndroidが新しく、Wrox PressのProfessional Android 2 Application Developmentの本を読んでいます。最初のチュートリアルの1つは、項目を順番に追加する単純なTo-Doリストです(情報やそのようなものは保存しません。後で教えます)。私が持っている問題は、私が書いたものを印刷するだけでなく、このような空のアイテムを追加することです(申し訳ありませんが、私は10以上の評判がないので、画像を投稿できません。アイデア):シンプルなTo-Doリストの例がAndroidで動作しない


(空のペース)


2番目のタスク


(空きスペース)


まずタスク


それは本の中で、それがWebページ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(""); 

私はその行をコメントアウトした場合、プログラムは私が書いたものを2回追加します。私は、引用符の内側に何かを追加する場合

Second Task 

    Second Task 

    First Task 

    First Task 

を...

myEditText.setText("Error"); 

それは、それを印刷します:

Error 

Second task 

Error 

First Task 

私はlooke Android APIでdアップしましたが、解決策が見つかりません。誰かが私を助けることができますか?どのように私はそれを動作するものに置き換えることができますか?

答えて

1

実際にKEYCODE_DPAD_CENTERは、指向性のパッドセンターキーです。トラックボールの動きから合成することもできます。このコードを書く必要がありますが、滑らかではありません。

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

申し訳ありませんが私の応答の遅れのために、私は忙しい週末を過ごしました:P @hossaindoulaと@Gregoryの両方が正しいですが、異なる方法です。私(そしてその本も)がキーボードイベントを正しく使用していなかったことを指摘することは、うまくいくものを開発する鍵でした。今は続けることができます。みんなありがとう! – Versec

2

キーを押すたびに呼び出されるイベントは、KEY_DOWNの後にKEY_UPイベントが続きます。あなたのコードでは、それらをフィルタリングしないので、2のためだけに起動します。最初のものはeditTextにテキストがあり、もう一方はeditTextのテキストがフラッシュされた後にトリガされます。

あなたはonKey方法に次のようなものを追加することができます

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

これは、イベントダウンキーをaknowledgeますが、あなたはそれで何もしませんが。その後、キーアップが来たら、そのキーアップを使用します。

関連する問題