EditText.getText().toString() не работает?

#android

#Android

Вопрос:

Вот мой текущий код. По сути, он заполняет мой список ‘com.teslaprime.prirt.Задача @44ef98aO’, которая, я полагаю, является конкретным экземпляром этого класса. есть идеи?

 package com.teslaprime.prirt;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import java.util.ArrayList;
import java.util.List;

public class TaskList extends Activity {
  List<Task> model = new ArrayList<Task>();
  ArrayAdapter<Task> adapter = null;

  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    Button add = (Button) findViewById(R.id.add);
    add.setOnClickListener(onAdd);

    ListView list = (ListView) findViewById(R.id.tasks);

    adapter = new ArrayAdapter<Task>(this,android.R.layout.simple_list_item_1,model);
    list.setAdapter(adapter);
  }

  private View.OnClickListener onAdd = new View.OnClickListener() {
    public void onClick(View v) {
      Task task = new Task();
      EditText name = (EditText) findViewById(R.id.taskEntry);

      task.name = name.getText().toString();

      adapter.add(task);
    }
  };
}
  

 <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  >
  <LinearLayout android:id="@ id/entryBar"
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    >
    <EditText android:id="@ id/taskEntry"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_weight="1"
    />
    <Button android:id="@ id/add"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Add"
    />
  </LinearLayout>
  <ListView android:id="@ id/tasks"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:layout_above="@id/entryBar"
  />
</RelativeLayout>
  

Комментарии:

1. Что вы подразумеваете под «не работает»?

2. как я уже сказал, вместо заполнения списка тем, что пользователь вводит в поле EditText, он выводит какую-то странную строку экземпляра класса.

Ответ №1:

Похоже, что вы вызываете task.toString() куда-то еще.

Попробуйте adapter.add(task.name); или переопределите toString() в вашем Task классе

То, что вы видите в списке: com.teslaprime.prirt.Task@44ef98aO является результатом Object.toString() . Вам нужно переопределить его, чтобы заставить его возвращать нужную строку:

 public class Task {
  // all your code here
  @Override
  public String toString() {
    return this.name;
  }
}
  

Комментарии:

1. и где бы это могло быть? :P. то, что вы видите выше, — это весь мой код.

2. (Редактировать: этот комментарий не имеет смысла теперь, когда вы удалили свой). У вас действительно есть toString() метод в вашем классе. Он унаследован от Object класса, и результат в точности соответствует тому, что вы наблюдали. Что вам нужно сделать, это добавить код, который я написал, в ваш Task класс, чтобы получить более качественный результат. Добавив эти несколько строк, вы можете продолжать использовать adapter.add(task);

3. да, я понял это после того, как опубликовал свой комментарий, лол. спасибо за помощь! Я всего пару часов занимаюсь разработкой Android, хе-хе: P.

4. @Chris это очень распространенная ловушка. Помните, Android в конечном итоге является java, поэтому все правила Java применяются и здесь.

Ответ №2:

Ваш EditText в порядке, но вы добавляете его к этой задаче и добавляете задачу к адаптеру. Добавьте name.getText().toString(); в adapter , а не в задачу.