[英]Custom three item ListView adapter
我有一个ListView布局,每个项目具有三个值(grade_list.xml),但是由于HashMap只接受两个String,所以我无法让我的适配器设置第三个值。 我该如何解决?
grade_list.xml
<TwoLineListItem xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="?attr/listPreferredItemHeight"
android:mode="twoLine"
android:paddingStart="?android:attr/listPreferredItemPaddingStart"
android:paddingEnd="?android:attr/listPreferredItemPaddingEnd">
<!-- First Line - Header Text -->
<TextView
android:id="@android:id/text1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignTop="@+id/thumbnail"
android:layout_toRightOf="@+id/thumbnail"
android:textColor="#040404"
android:typeface="sans"
android:textSize="15dip"
android:layout_marginTop="8dp"
android:textStyle="bold"/>
<!-- Second Line - Description -->
<TextView
android:id="@android:id/text2"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@android:id/text1"
android:layout_alignStart="@android:id/text1"
android:textColor="#343434"
android:textSize="10dip"
android:layout_marginTop="1dip"
android:layout_toRightOf="@+id/thumbnail" />
<!-- Third Line - Grade -->
<TextView
android:id="@+id/text3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_alignTop="@id/title"
android:gravity="right"
android:layout_marginTop="8dp"
android:layout_marginRight="5dip"
android:textSize="10dip"
android:textColor="#10bcc9"
android:textStyle="bold"/></TwoLineListItem>
我的服务器以以下方式响应
Period 1 - Language Arts;Period 2 - Biology;Period 3 - Engineering~~DIVIDER~~A+;B-;A
格式为
Class;Class;Class~~DIVIDER~~Grade;Grade;Grade
然后客户端使用此代码将该数据放入ListView
final String[] ServerResponse = input.split("~~DIVIDER~~");
final String[] Classes = ServerResponse[0].split(";");
final String[] Grades = ServerResponse[1].split(";");
ArrayList<HashMap<String, String>> item_list = new ArrayList<HashMap<String, String>>();
for (int i = 0; i < Classes.length; i++) {
HashMap<String, String> item = new HashMap<String, String>();
item.put("Class", Classes[i]);
item.put("Grade", Grades[i]);
item_list.add(item);
}
String[] list_input = new String[] { "Class", "Grade" };
// PUT THE STRING VALUES FROM list_input INTO THE XML LAYOUT VALUES
int[] layout_values = new int[] { android.R.id.text1, android.R.id.text2};
// LISTVIEW LAYOUT (XML FILE)
int list_layout = grade_list;
ListView gradeListView = (ListView) findViewById(R.id.gradeListView);
gradeListView.setAdapter(new SimpleAdapter(this, item_list, list_layout, list_input, layout_values));
我想分开
Period 1 - Class Name
在两个单独的值中,句点将填充第一行,而类名将填充第二行,并以-字符分隔。 但是,HashMap将仅包含两个值,而不是我想要的三个值。
Android文档对此没有太大帮助,Google也没有。 提前致谢。
最好记住,HashMap将数据链接到行ID(两项)。 为每个列表行创建一个HashMap。 SimpleAdapter与用于从每个HashMap加载ListView的代码进行相同的迭代。
就像这样:
//Setting the HashMaps
HashMap<String,String> item;
for(int i=0;i<Classes.length;i++){
item = new HashMap<String,String>();
item.put( "text1", Period[i]);
item.put( "text2", Classes[i]);
item.put( "text3", Grades[i]);
list.add( item );
}
//...
//Setting the adapter
gradeListView.setAdapter(new new SimpleAdapter(this, item_list, R.layout.TwoLineListItem, new String[] { "text1","text2", "text3" }, new int[] {R.id.text1, R.id.text, R.id.text3}));
尽管您应该真正将TwoLineListItem重命名为ThreeLineListItem,以避免将来造成混乱。
您可以为列表项创建自定义对象
public class ListItem {
public String text1;
public String text1;
public String text1;
public ListItem(String text1, String text2, String text3) {
this.text1 = text1;
this.text2 = text2;
this.text3 = text3;
}
}
然后使用ArrayList<ListItem>
和一个自定义适配器 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.