10

我想在我的 ListView 中显示这些项目

<string-array name="bookmark_titles">
    <item>Google</item>
    <item>Bing</item>
    <item>Gmail</item>
</string-array>

我有一个获取这些值的方法。

public static Collection getBookmarks(Context context) {
    Collection bookmarks = new Collection();

    String[] titles  = context.getResources().getStringArray(R.array.bookmark_titles);

    for (int i = 0; i < titles.length; i ++) {
        bookmarks.add(titles[i]);
    }

    return bookmarks;
}

如何在 main.java 中调用 getBookmarks 方法来填充 ListView?

我已经创建了一个 ListView。这是:

<ListView
    android:id="@+id/my_listView"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:divider="#ECECEC"
    android:dividerHeight="1sp" />

main.java 我正在尝试做这样的事情:

ListView lv = (ListView) findViewById(R.id.my_listView);

ArrayList<Bookmark> my_array = BookmarkCollection.getTestBookmarks(context);
adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, my_array);    
lv.setAdapter(adapter);
4

2 回答 2

15

您可以使用单线创建适配器,查看静态方法 ArrayAdapter createFromResource(Context context, int textArrayResId, int textViewResId)

第一个参数可能是您的 Activity,第二个是R.array.bookmark_titles,第三个是要使用的布局。

为了根据评论进行澄清,该方法 Accept int,这正是您生成的R类中的常量存储的内容。

这是一个完整的示例,假设这是从 Activity 调用的:

ArrayAdapter<CharSequence> aa = ArrayAdapter.createFromResource(this, R.array.bookmark_titles, android.R.layout.simple_list_item_1);
myListView.setAdapter(aa);

In this case, android.R.layout.simple_list_item_1 refers to an XML layout that is provided by the Android SDK. You can change this if needed.

于 2012-10-25T13:31:43.223 回答
3

You can do this with an ArrayAdapter and have it use either an Array or a List to give it data

lv.setAdatper(new ArrayAdapter<String>(context, R.layout.some_layout_to_use, R.id.some_textview_in_layout, listData);
于 2012-10-25T13:42:07.013 回答