Android listview适配器问题

时间:2011-05-19 20:38:55

标签: android listview adapter

在我的活动中,有一个包含文本文件行的列表视图。为了填充此列表视图,我在onCreate(Bundle savedInstanceState)方法中创建了一个arrayadapter。如果文件中有行,则列表视图将填充项目。 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();

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

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

它没有看到列表视图( lv1无法解析)。 如果我定义其他变量所在的ListView(ListView lv1;),那么程序的整个部分都无法正常工作。

我还需要在填充之前用adapter1.clear();或sg清空listview(适配器?)。 欢迎任何想法。

1 个答案:

答案 0 :(得分:0)

如果您需要这些变量是全局变量,则应将它们声明为

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(您ListAdapter)中使用的数组。

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

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

如果您每次更改时都在阅读整个文件,并从顶部填充(不仅仅是插入新行),您必须首先删除列表中的所有元素,因此{{1方法应该是:

addLinesToList