2017-04-30 20 views
0

アイテムごとに3つの値(grade_list.xml)を持つListViewレイアウトがありますが、HashMapは2つの文字列しか取らないため、アダプタに第3の値を設定できません。どうすればこの問題を回避できますか?私のサーバーはカスタム3項目ListViewアダプタ

Class;Class;Class~~DIVIDER~~Grade;Grade;Grade 

の形式で

Period 1 - Language Arts;Period 2 - Biology;Period 3 - Engineering~~DIVIDER~~A+;B-;A 

の線に沿って何かで応答

<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> 



grade_list.xmlは、クライアントはにそのデータを置きますこのコードの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)); 

私は2つの別々の値に

Period 1 - Class Name 

を分割したいのですが、期間は最初の行を移入だろう、とクラス名がでスプリットセカンドライン、移入う - 文字を。しかし、HashMapは、希望する3つの値の代わりに2つの値しか保持しません。

Androidのドキュメントはこれに多大な援助をしておらず、Googleもそうではありません。前もって感謝します。

+0

"HashMapは2つの値しか保持しません"という正確な意味は?つまり、3つ目のキーと値を入れないのは何ですか? –

答えて

1

HashMapは、データをラインID(2項目)にリンクすることを忘れないようにしてください。リストラインごとにHashMapが作成されます。 SimpleAdapterは、各HashMapからListViewをロードするコードと同じ繰り返しを行います。

それはのようなものだろう:あなたは本当に将来の混乱を避けるために、ThreeLineListItemにごTwoLineListItemの名前を変更する必要がありますが

//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})); 

0

あなたは次にArrayList<ListItem>custom adapterを使用して、リスト項目

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; 
    } 
} 

のためのカスタムオブジェクトを作ることができます。

関連する問題