我正在编写一个包含一些简单视图的应用程序;首先是两个按钮。每个按钮都会显示一张地图,此地图上会显示一个按钮,用于打开网站上的建筑物列表。从这里,用户将能够选择建筑物并查看其上的详细信息(实际上非常类似于联系人列表)。 到目前为止,我可以通过创建字符串数组来填充listview,直接在活动中填充它,如下所示:
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个项目列表非常有用,但是在它的最终形式中,列表可能包含多达100个建筑物,我有2个问题: 1)一百个项目长字符串数组在这样的代码中看起来真的很粗略 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>
我的另一种选择是从文本文件中检索它,我将不得不为构建详细信息(因为文本量太大而无法保存为字符串)但要避免列表。不可否认,我没有对此路线进行过大量研究(因为我还没有真正想要使用它,而且根据我在其他论坛上看到的情况看起来很难,但是如果对这种方法有很多支持那么我肯定会感谢任何使用它的建议。
请原谅我,如果其他线程已经涵盖了这些内容。我寻找类似的主题,但似乎没有人希望以这种方式填充列表,他们的问题中的很多语言都超出了我的想法(我很新......这是我的第一个真正的应用程序,除了通过工作开发人员网站上的一些教程。
答案 0 :(得分:1)
Java的ArrayList
实现了Serializable
接口,它允许您使用函数writeObject
和readObject
在纯二进制格式中保存和加载数组。 This page应该足以让你入门。
答案 1 :(得分:0)
如果你的String []的上限是100,我不认为只是生成数组并将其传递给适配器是一个问题。至于您对代码看起来粗略的担心,您是否考虑将此信息存储在数据库中然后请求它?例如,您可以拥有一个构建实体,其中包含所有信息,并使用OrmLite将其保留到MySQL。 http://ormlite.com/javadoc/ormlite-core/doc-files/ormlite_1.html#SEC1然后你可以编写一个getter而不是返回一个数组表示来避免丑陋的代码。
答案 2 :(得分: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);
第二个参数是android SDK的预定义布局,你可以使用自己的布局。