6

私は Android を初めて使用し、本の to do リストの例に取り組んでいます。その下に EditText と ListView を表示するアクティビティが 1 つあります。EditText から ListView にテキストを追加し、EditText をクリアする onKey イベントがあります。ただし、キーボードで Enter キーを押すと、新しい行が EditText に追加され、ListView には何も追加されません。

onCreate コードは次のとおりです。

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

    // Get UI references
    ListView myListView = (ListView)findViewById(R.id.myListView);
    final EditText myEditText = (EditText)findViewById(R.id.myEditText);
    myEditText.setText("test");
    // Create ArrayList to store To Do items
    final ArrayList<String> toDoItems = new ArrayList<String>();

    // Create ArrayAdapter to bind items to List View
    final ArrayAdapter<String> aa;

    aa = new ArrayAdapter<String>(this,
                                  android.R.layout.simple_list_item_1,
                                  toDoItems);

    // Bind Adapter to List View
    myListView.setAdapter(aa);

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

myEditText.setText("test");myEditText への参照が機能していることを確認するためだけに追加しました。onKey イベントから if ステートメントを削除しようとしましたが、キー イベントがまったく登録されていないようです。ここで私が間違っていることを誰かにアドバイスできますか?

4

6 に答える 6

2

次の属性を EditText 要素に追加することで、同じ例を機能させることができましたandroid:inputType="text"。これにより、ユーザーに表示されるソフトウェア キーボードが変更され、[送信] ボタンが含まれました。

setOnKeyListener コードでは、次のように変更しました。

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

KEYCODE_DPAD_CENTER は、上下左右の矢印があるデバイスのハードウェア ボタンであるため、使用しないでください。

于 2014-09-21T15:23:52.783 に答える
1

の代わりにsetOnKeyListener、 を実装してみてくださいsetOnEditorActionListener。お役に立てれば。

于 2013-08-10T17:40:39.940 に答える
-1

<EditText android:id="@+id/search" android:singleLine="true" android:imeOptions="actionSearch">

singleLine および imeOption 属性を追加してみてください。

于 2015-08-11T10:14:53.740 に答える