【发布时间】:2016-09-10 14:16:53
【问题描述】:
我想通过使用HashMap和simpleAdapter在Listview中显示一个非常简单的Key->value。 xml 文件包含 2 个 Textview。我使用 Hashmap 的原因是因为我需要在单击它们时使用“key”作为参考,然后将其传递给另一个 Activity。
public class Main2Activity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
String[] animal_id = new String[] {
"1",
"2",
"3"
};
String[] animal_names = new String[] {
"mouse",
"dragon",
"tiger"
};
List<HashMap<String,String>> aList = new ArrayList<HashMap<String,String>>();
for(int i=0;i<3;i++){
HashMap<String, String> hm = new HashMap<String,String>();
hm.put("ID",animal_id[i]);
hm.put("Name",animal_names[i]);
aList.add(hm);
}
String[] from = { "ID","Name"};
int[] to = { R.id.id, R.id.name};
SimpleAdapter adapter = new SimpleAdapter(this, aList, android.R.layout.simple_list_item_1, from, to);
ListView listView = (ListView) findViewById(R.id.listView);
listView.setAdapter(adapter);
}
XML
<?xml version="1.0" encoding="utf-8"?>
<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"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.volley.Main2Activity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="id"
android:id="@+id/id"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="name"
android:id="@+id/name"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true" />
<ListView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/listView" />
</RelativeLayout>
【问题讨论】:
-
SimpleAdapter构造函数调用中有一个额外的参数。删除getBaseContext()。 -
作为@MikeM。说,您在构造函数中有一个额外的参数,要修复它,只需将
this, getbaseContext()替换为getApplicationContext()即可。 -
@MikeM。谢谢。但是这一行“setListAdapter(adapter);”仍然是红色。任何想法 ?看起来我缺少一些编码才能在列表视图中显示它?
-
你在
AppCompatActivity,而不是ListActivity。没有setListAdapter()方法。您需要直接在您的ListView上致电setAdapter()。 -
首先,您通常不希望
wrap_content获得ListView。我猜你的布局中并不真的需要那些<TextView>s,所以你可以删除它们,并让你的ListViewmatch_parent双向。然后,您可能希望使用android.R.layout.simple_list_item_2代替Adapter,因为您似乎希望在每个项目中有两个东西,而您的to数组将是{android.R.id.text1, android.R.id.text2}。
标签: android