Java 在Android上显示ListView

Java 在Android上显示ListView,java,android,user-interface,Java,Android,User Interface,如何在Android中创建工作列表视图 我不是想让你修改我的代码,而是想找一个简单的Android ListView工作示例,这样我就可以理解创建一个ListView并使用它的过程。但是我已经包括了我的代码,所以你可以看到我来自哪里,我一直在尝试什么 我做了以下工作,但没有成功: -- 创建了仅包含TextView项的xml布局: <?xml version="1.0" encoding="utf-8"?> <TextView xmlns:android="http://sch

如何在Android中创建工作列表视图

我不是想让你修改我的代码,而是想找一个简单的Android ListView工作示例,这样我就可以理解创建一个ListView并使用它的过程。但是我已经包括了我的代码,所以你可以看到我来自哪里,我一直在尝试什么

我做了以下工作,但没有成功:

--

创建了仅包含TextView项的xml布局:

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:id="@+id/dir_text_view"
    />

按照以下教程中的说明创建了以下类:

公共类DataTemplerArrayAdapter扩展了ArrayAdapter{
HashMap mIdMap=新的HashMap();
公共数据模板arlayadapter(上下文上下文,int textViewResourceId,
列出对象){
超级(上下文、textViewResourceId、对象);
对于(int i=0;i
在主要活动中,我有一段代码,试图将字符串列表添加到与DataTemplerArrayAdapter关联的ArrayList,如下所示:

int i;
for (i=0;i<dirContents.length;i++) {
    dirList.add(dirContents[i]);
    //Toast.makeText(this, dirList.get(i), Toast.LENGTH_SHORT).show();
}
adapter.notifyDataSetChanged();
inti;

对于(i=0;i摘录自您的代码:

@Override
protected void onCreate(Bundle savedInstanceState) {
//...
dirList = new ArrayList<String>();
//...
ArrayList<String> dirList = new ArrayList<String>();
adapter = new DataTempleArrayAdapter(this,
        R.id.dir_text_view, dirList);
//...
}
@覆盖
创建时受保护的void(Bundle savedInstanceState){
//...
dirList=newarraylist();
//...
ArrayList dirList=新的ArrayList();
适配器=新的DataTemplerAdapter(此,
R.id.dir_text_view,dirList);
//...
}

我打赌您已经看到了问题所在,但如果您不知道问题所在:您有一个字段和一个同名的局部变量。您将局部变量传递给适配器。适配器自然不会对字段上的更改做出反应,因为它不知道它的存在。

摘自您的代码:

@Override
protected void onCreate(Bundle savedInstanceState) {
//...
dirList = new ArrayList<String>();
//...
ArrayList<String> dirList = new ArrayList<String>();
adapter = new DataTempleArrayAdapter(this,
        R.id.dir_text_view, dirList);
//...
}
@覆盖
创建时受保护的void(Bundle savedInstanceState){
//...
dirList=newarraylist();
//...
ArrayList dirList=新的ArrayList();
适配器=新的DataTemplerAdapter(此,
R.id.dir_text_view,dirList);
//...
}

我打赌你已经看到了问题所在,但如果你不知道的话:你有一个字段和一个同名的局部变量。你将局部变量传递给适配器。适配器自然不会对字段上的更改做出反应,因为它不知道它的存在。

我认为你做得不对的是提供一个UI Co阵列适配器的组件,包括:

adapter = new DataTempleArrayAdapter(this, R.id.dir_text_view, dirList);
第二项不应是ID,而应是布局文件。Android已经使用您可以使用的文本视图实现了列表项布局:
Android.R.layout.simple\u List\u item\u 1

因此,将您的行替换为

adapter = new DataTempleArrayAdapter(this, android.R.layout.simple_list_item_1, dirList);
你离我们更近了一步


(这样,您就不需要“只包含TextView项的xml布局”)

我认为您所做的错误是向阵列适配器提供了一个UI组件,其中包括:

adapter = new DataTempleArrayAdapter(this, R.id.dir_text_view, dirList);
第二项不应是ID,而应是布局文件。Android已经使用您可以使用的文本视图实现了列表项布局:
Android.R.layout.simple\u List\u item\u 1

因此,将您的行替换为

adapter = new DataTempleArrayAdapter(this, android.R.layout.simple_list_item_1, dirList);
你离我们更近了一步

(这样,您就不需要“只有文本视图项的xml布局”)

  • 理解ListView的最佳资源之一就是 你提到的那个

  • 另一个很酷的资源来了解 notifyDataSetChanged()方法在ListView中工作

  • 有关如何在中使用自定义布局的简短说明 ListView(不带ViewHolder模式)检查另一个最佳选项 参考资料:

  • 讨论ListView中的视图持有者模式的好处: 检查

  • 中ViewHolder模式的简明示例和说明 列表视图:检查

为了修复您的代码,我认为前面给出的答案只是问题的一部分:

你一定要评论这句话

 //ArrayList<String> dirList = new ArrayList<String>();
希望这有帮助!

  • 理解ListView的最佳资源之一就是 你提到的那个

  • 另一个很酷的资源来了解 notifyDataSetChanged()方法在ListView中工作

  • 有关如何在中使用自定义布局的简短说明 ListView(不带ViewHolder模式)检查另一个最佳选项 参考资料:

  • 讨论ListView中的视图持有者模式的好处: 检查

  • 中ViewHolder模式的简明示例和说明 列表视图:检查

为了修复您的代码,我认为前面给出的答案只是问题的一部分:

你一定要评论这句话

 //ArrayList<String> dirList = new ArrayList<String>();

希望这有帮助!

检查此链接。。您可以使用recycler view,它是listview的改进版本。检查此链接。。您可以使用recycler view,它是listview的改进版本。是的,它有;每个人的回答都帮了大忙。@Graffiti Plum我很高兴我能帮上忙=)@涂鸦李子如果你觉得这个答案解决了你的问题,请将答案标记为已接受;)没问题,我们都去过。谢谢;)是的,是的;每个人的回答都帮了大忙。@Graffiti-Plum我很高兴能帮上忙=)@Graffiti-Plum如果你觉得这个答案解决了你的问题,请将答案标记为已接受;)没问题,我们都去过。谢谢;)
    dirList.clear();
    dirList.addAll(Arrays.asList(f.list()));