【问题标题】:Android listview adapter questionAndroid listview 适配器问题
【发布时间】:2011-05-19 20:38:55
【问题描述】:

在我的活动中有一个包含文本文件行的列表视图。为了填充这个列表视图,我在 onCreate(Bundle savedInstanceState) 方法中创建了一个数组适配器。如果文件中有行,则列表视图将填充项目。 arrayadapter 部分如下所示:

   final ListView lv1 = (ListView) findViewById(R.id.ListView01);
 ArrayAdapter<String> adapter1;
    adapter1 = new ArrayAdapter<String>(Main.this,R.layout.list_black_text,R.id.list_content, assignArr0);
    lv1.setAdapter(adapter1);
    adapter1.notifyDataSetChanged();

然后通过单击 Menu item1(所以现在我们在 onCreate(Bundle savedInstanceStat) 方法之外,我在文本文件中写了一行。现在一切正常。如果我退出并重新打开应用程序,新行将出现在listview。但是添加新行后listview没有刷新,所以在“case R.id.Menu1:”部分的末尾。

因此,在向文件添加一行之后,我想通过将文件中的行读取到数组中来刷新列表视图,然后用该数组填充列表视图。问题是我不能这样做,即使我将 ArrayAdapter&lt;String&gt; adapter1; 行放在声明其他数组和变量的 onCreate() 方法之外。

它看不到列表视图(lv1 无法解析)。 如果我定义了其他变量所在的 ListView (ListView lv1;),则程序的整个部分都不起作用。

我还需要在填充之前通过adapter1.clear(); 或 sg 清空列表视图(适配器?)。 欢迎任何想法。

【问题讨论】:

    标签: android listview adapter


    【解决方案1】:

    如果你需要这些变量是全局的,你应该将它们声明为

    private final ArrayList<String> assignArr0 = new ArrayList<String>();
    private ListView lv1;
    private ArrayAdapter<String> adapter1;
    
    @Override
    public void onCreate(Bundle icicle)
    {
        lv1 = (ListView) findViewById(R.id.ListView01);
        adapter1 = new ArrayAdapter<String>(Main.this,R.layout.list_black_text,
            R.id.list_content, assignArr0);
        lv1.setAdapter(adapter1);
    }
    

    您应该只将适配器设置为ListView 一次,在您的活动的onCreate 方法中,并且应该在您对列表进行更改后调用notifiyDatasetChanged(@987654326 中使用的数组@)。

    假设您有一种方法可以添加尚未包含在列表中的最近阅读的行。在ListAdapter中使用的ArrayList添加行后,您应该调用notifyDatasetChanged方法,以可视化ListView中的新项目:

    private void addLinesToList(final String... newLines)
    {
        assignArr0.addAll(Arrays.asList(newLines));
        adapter1.notifyDataSetChanged();
    }
    

    如果您在每次更改时读取整个文件,并从顶部填充它(不仅仅是插入新行),您必须首先删除列表的所有元素,所以addLinesToList 的第一行方法应该是:

    assignArr0.clear();
    

    【讨论】:

    猜你喜欢
    • 2011-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多