2014-10-05 33 views
1

我最近開始在android應用程序上工作(我對這個平臺很新穎)。 我只是想寫一個簡單的待辦事項應用程序來了解陣列適配器是如何工作的。ArrayAdapter沒有更新

- 所以一旦我在myTextView中輸入文本並按下「Enter」,我希望文本顯示在下面的列表視圖中。如圖所示,在列表視圖中沒有更新。 我在這裏做錯了什麼?請幫忙。

test.java:

package com.niranjanbajgai.test; 

import android.app.Activity; 
import android.os.Bundle; 
import android.view.KeyEvent; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.widget.ArrayAdapter; 
import android.widget.EditText; 
import android.widget.ListView; 


import java.util.ArrayList; 


public class test extends Activity { 

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

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

     //Create the array list 
     final ArrayList<String> myArrayList = new ArrayList<String>(); 

     //create an array adapter to bind array to the list view 

     final ArrayAdapter<String> myArrayAdapter = new ArrayAdapter<String>(
       this, android.R.layout.simple_list_item_1, myArrayList); 

     myListView.setAdapter(myArrayAdapter); 

     myEditText.setOnKeyListener(new View.OnKeyListener() { 
      @Override 
      public boolean onKey(View view, int keyCode, KeyEvent keyEvent) { 
       if(keyEvent.getAction() == keyEvent.ACTION_DOWN){ 
        if(keyCode == keyEvent.KEYCODE_ENTER){ 
         myArrayList.add(0, myEditText.getText().toString()); 

         myArrayAdapter.notifyDataSetChanged(); 
         myEditText.setText(""); 
        } 
        return true; 

       } 
       return false; 
      } 
     }); 

    } 


    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.test, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 
     if (id == R.id.action_settings) { 
      return true; 
     } 
     return super.onOptionsItemSelected(item); 
    } 
} 

activity_test.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    tools:context=".test"> 

    <EditText 
     android:id="@+id/myEditText" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:hint="@string/addItemHint"/> 
    <ListView 
     android:id="@+id/myListView" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"/> 
</LinearLayout> 

enter image description here

+0

在這裏放置一個斷點'myArrayList.add(0,myEditText.getText()。toString());'然後調試並確保數據被添加到'myArrayList'中。 – Rustam 2014-10-05 19:02:04

回答

3

你想從鍵盤右側底部右側的按鈕確認您的EditText的內容?

目前,該按鈕允許添加一個新行。我認爲只有在使用硬件鍵盤時才調用onKeyListener,這就是爲什麼它永遠不會被調用。

要更改右下角的按鈕,您需要將EditText的ime選項更改爲actionDone。

<EditText 
    android:id="@+id/myEditText" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:hint="@string/addItemHint" 
    android:imeOptions="actionDone" /> 

然後你可以通過EditorActionListener刪除您onKeyListener:

editText.setOnEditorActionListener(new OnEditorActionListener() { 
    @Override 
    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { 
     boolean handled = false; 
     if (actionId == EditorInfo.IME_ACTION_DONE) { 
      myArrayList.add(0, myEditText.getText().toString()); 

      myArrayAdapter.notifyDataSetChanged(); 
      myEditText.setText(""); 
      handled = true; 
     } 
     return handled; 
    } 
}); 

有關的EditText和鍵盤的更多詳情,您可以閱讀documentation

你的代碼的其餘部分看起來不錯並應該工作。只需用match_parent替換ListView的高度(不應該包裝ListView)。

+0

謝謝Julien。如果其他人有類似的問題,我還必須在''內添加'android:singleLine =「true」'使其工作。 – niranjanbajgai 2014-10-06 21:38:24