Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Enter key starting a new line in EditText instead of submitting the text (Android)

I have a simple todolist app I'm creating whereby new todo items are added via an EditText View. So I'm trying to have it submit the new item to the list when I press the enter key. For some reason though it just enters a new line instead. I have also noticed that it works fine when I use the enter key via an AVD through eclipse but the problem only occurs when I'm running it through my Nexus 4.

Here is my code:

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

    //Create reference to the ListView in the main layout
    ListView myListView = (ListView)findViewById(R.id.myListView);

    //Create a reference to the EditText view in the main layout for adding new items
    final EditText editText = (EditText)findViewById(R.id.myEditText);

    //Create a an arraylist to hold all the todo items
    final ArrayList<String> todoList = new ArrayList<String>();

    //Create an ArrayAdaptor object to be able to bind ArrayLists to ListViews
    final ArrayAdapter<String> arrayAdaptor = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, todoList);
    myListView.setAdapter(arrayAdaptor);

    //Listens for certain keys to be pushed, particular the dpad center key or enter key
    editText.setOnKeyListener(new View.OnKeyListener() {    
        @Override
        public boolean onKey(View v, int keyCode, KeyEvent event) {
            if(event.getAction() == KeyEvent.ACTION_DOWN)
            {
                if((keyCode == KeyEvent.KEYCODE_ENTER || keyCode == KeyEvent.KEYCODE_DPAD_CENTER))
                {
                    //add item in the EditText to the todo list 
                    todoList.add(0, editText.getText().toString());
                    //Update the view by notifying the ArrayAdapter of the data changes
                    arrayAdaptor.notifyDataSetChanged();
                    editText.setText("");
                    return true;
                }
                return false;
            }
            return false;
        }
    });
}

And XML:

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

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

<ListView
    android:id="@+id/myListView"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"  
/>

Please note that I have found similar questions on stack overflow but none seem to solve my problem. I've tried!

like image 290
TomTaila Avatar asked Dec 09 '13 15:12

TomTaila


People also ask

What is difference between TextView and edit?

EditText is used for user input. TextView is used to display text and is not editable by the user. TextView can be updated programatically at any time.

How do you make EditText not editable and clickable?

Make EditText non editable in Android To use this just set android:inputType="none" and it will become non editable.


2 Answers

Set the singleLine property on your EditText widget to true:

<EditText
    android:singleLine="true"
    android:id="@+id/myEditText"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:hint="@string/addItemHint"
    android:imeOptions="actionDone"
/>
like image 130
MobileMon Avatar answered Oct 03 '22 00:10

MobileMon


android:inputType="textMultiLine"

adding this property in edittext will solve the problem

like image 43
Priyankchoudhary Avatar answered Oct 02 '22 23:10

Priyankchoudhary