1

我正在编写一个包含一些简单视图的应用程序;首先是两个按钮。每个按钮都指向一张地图,从这张地图中,有一个按钮可以打开网站上的建筑物列表。从这里,用户将能够选择建筑物并查看其详细信息(实际上很像联系人列表)。到目前为止,我可以通过创建字符串数组来填充列表视图以直接在活动中填充它,如下所示:

public class BuildingsActivity extends ListActivity {

static final String[] buildings=new String[]{
    "Building 1",
    "Building 2",
    "Building 3",
    "Building 4",
    "Building 5"
};

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_buildings);
    // Show the Up button in the action bar.
    getActionBar().setDisplayHomeAsUpEnabled(true);
    setListAdapter(new ArrayAdapter<String>(this,           android.R.layout.simple_list_item_1,buildings));
}

这对于一个 5 项的列表非常有效,但在它的最终形式中,列表可能包含多达一百个建筑物,我有两个问题:1) 一个包含 100 项的长字符串数组看起来真的很恶心在这样的代码中定义 2)如果必须事先生成如此大的字符串值列表,我担心应用程序打开活动需要多长时间

为了避免这种情况,我想在 strings.xml 文件中定义这个字符串数组,并将字符串分配给列表活动的相应布局 XML 中的列表布局。但是,到目前为止,这似乎不起作用。没有错误,但 android:entries 命令根本看不到影响布局。这是 XML。如果有人知道以这种方式填充列表,我将不胜感激。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".BuildingsActivity" >
    <ListView
          android:id="@android:id/list"
          android:layout_width="match_parent"
          android:layout_height="wrap_content"
          android:entries="@array/buildings">
    </ListView>

</RelativeLayout>

我的另一种选择是从文本文件中检索它,我将不得不这样做来构建细节(因为文本量太大而无法保存为字符串)但想要避免列表。诚然,我还没有深入研究过这条路线(因为我还没有真正想使用它,而且根据我在其他论坛上看到的内容,这看起来很困难,但如果有很多人支持这种方法,那么我肯定会感谢使用它的任何建议。

如果其他线程中已经涵盖了这些内容,请原谅我。我确实搜索过类似的主题,但似乎没有人想以这种方式填充列表,而且他们的问题中的很多语言都让我头疼(我很新……这是我的第一个真正的应用程序,除了已经完成开发者网站上的一些教程。

4

3 回答 3

1

JavaArrayList实现了该Serializable接口,它允许您使用函数writeObjectreadObject. 这个页面应该足以让你开始。

于 2013-02-16T04:20:06.293 回答
0

如果您想从资源文件中填充 listView,您只需在代码中使用它:

String[] values = getResources().getStringArray(R.array.<input_file>);

一旦加载了值,您只需将其分配给 ArrayAdapter,如下所示:

adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, values);
setListAdapter(adapter);

第二个参数是安卓 SDK 的预定义布局,您可以使用自己的布局。

于 2013-02-16T05:04:27.473 回答
0

如果您的 String[] 的上限为 100,我认为仅生成数组并将其传递给适配器不会有问题。至于您对代码看起来很糟糕的担忧,您是否考虑过将这些信息存储在数据库中然后请求它?例如,您可以拥有一个 Building Entity,其中包含其所有信息,并使用 OrmLite 将其保存到 MySQL。http://ormlite.com/javadoc/ormlite-core/doc-files/ormlite_1.html#SEC1然后你可以写一个getter而不是返回一个数组表示来避免丑陋的代码。

于 2013-02-16T04:25:41.830 回答