#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
, а не в задачу.