我有来自数据库的简单列表,想要在简单的列表视图中显示。
public class FindAllJobs extends ListActivity {
private JobOperations operations;
ArrayList<JobModel> jobs;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_find_all_jobs);
operations = new JobOperations(this);
operations.open();
jobs = operations.getJobListBySearchKey("python");
operations.close();
//ListView listView = (ListView)findViewById(R.id.list);
//JobAdapter adapter = new JobAdapter(this,jobs);
ArrayAdapter<JobModel> adapter = new ArrayAdapter<>(this,
android.R.layout.simple_list_item_1, jobs);
//listView.setAdapter(adapter);
setListAdapter(adapter);
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_find_all_jobs"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="jobs.find.com.finddevjobs.models.FindAllJobs">
<ListView
android:id="@android:id/list"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_above="@+id/textView1"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"/>
</LinearLayout>
但是列表总是显示com.packages.JobModel@dfdfdfdfdfdfdfd
,为什么?
哪里出错?甚至创建了自定义适配器,但结果是一样的。
我是Android的新手,只是db :)的第一个ListView。 Db部分工作正常。
这是适配器,但实际上还没有完成,我不明白我应该返回视图还是列表? :(
public class JobAdapter extends ArrayAdapter<JobModel> {
public JobAdapter(Context context, ArrayList<JobModel> jobs) {
super(context, 0, jobs);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
JobModel job = getItem(position);
if (convertView == null) {
convertView = LayoutInflater.from(getContext()).inflate(R.layout.activity_find_all_jobs, parent, false);
}
return convertView;
}
}
答案 0 :(得分:2)
错误是,ListView获取了一个对象列表。但它不知道它应该如何命名。
这个问题有两种解决方案:
轻松的
在JobModel中添加重写的toString()方法,并定义ListView中的标签应该是什么样子并返回它。
像这样的东西
@Override
public String toString(){
return "Name: " + this.getName + " Date: " + this.getDate();
}
可以修改的复杂的
创建自定义ListViewAdapter,从JobModel获取要显示的信息。互联网上有很多例子可以创建这样的适配器。
答案 1 :(得分:1)
您必须拥有自己的适配器,如果要使用默认适配器,则必须将String对象传递给ArrayAdapter<String>
。由于调用listview
而在JobModel.toString()
中看到的这些内容