Android:ListView不显示项目

时间:2017-02-28 13:34:04

标签: java android android-layout listview

我有来自数据库的简单列表,想要在简单的列表视图中显示。

    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部分工作正常。

enter image description here 这是适配器,但实际上还没有完成,我不明白我应该返回视图还是列表? :(

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;
    }


}

2 个答案:

答案 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()中看到的这些内容