【问题标题】:Android: ListView does not show itemsAndroid:ListView 不显示项目
【发布时间】:2017-02-28 21:41:13
【问题描述】:

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

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

这是adapter,其实还没完,不明白是返回view还是list? :(

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


}

【问题讨论】:

  • Android 将无法在ArrayAdapter 中自动显示您的JobModel,因为它试图仅在您的对象上调用.toString() 并显示它。您可以发布您为自定义适配器尝试过的代码吗?这将是要走的路。如果您只想显示来自每个 JobModel 的字符串,您还可以构建一个新的 Strings 列表并将其显示在 ArrayAdapter
  • 我认为是重复的你可以点击这个链接stackoverflow.com/questions/15297840/…

标签: java android android-layout listview


【解决方案1】:

错误在于,ListView 获得了一个对象列表。但它不知道应该如何命名它们。 这个问题有 2 个解决方案:

简单的一个
在 JobModel 中添加重写的 toString() 方法,并在那里定义 ListView 中的标签应该是什么样子并返回它。

类似的东西

 @Override
 public String toString(){
   return "Name: " + this.getName + "  Date: " + this.getDate();
 }

可以修改的复杂
创建一个自定义 ListViewAdapter,获取您想要从 JobModel 中显示的信息。网上有很多例子是如何创建这样一个适配器的。

【讨论】:

  • 好的,我会尝试谢谢,我希望自动将我的作业模型转换为列表视图:)))
【解决方案2】:

你必须有你自己的适配器,如果你想使用默认值,你必须将字符串对象传递给ArrayAdapter&lt;String&gt;。这些你在listview中看到的内容是因为调用JobModel.toString()

【讨论】:

  • 好的,现在明白问题所在了:)我希望自动从对象转换为列表:)
  • 是的,没错。你可以使用这篇文章listview adapter@ArmenArzumanyan
猜你喜欢
  • 2013-01-19
  • 1970-01-01
  • 2013-06-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多