2014-10-05 99 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