2012-07-11 9 views
6

サンプルアプリケーションを使用してAndroidを学習しています。複数の選択リストを表示することになっています。ユーザーがボタンをクリックすると、上部にTextViewで選択された項目が表示されます。 ListViewから選択した項目を取得しようとすると、空の配列が常に返されるようです。誰が私に説明して、なぜこれが当てはまるのか、私はそれが正しく動作するように何が欠けているのかを説明できますか?getListView()を使用しているときに空の配列。getCheckedItemIds()

package com.commonsware.android.checklist; 

import android.os.Bundle; 
import android.app.ListActivity; 
import android.widget.ArrayAdapter; 
import android.widget.ListView; 
import android.widget.TextView; 
import android.view.*; 

public class ChecklistDemo extends ListActivity { 
    private static final String[] items={"lorem", "ipsum", "dolor", 
        "sit", "amet", 
        "consectetuer", "adipiscing", "elit", "morbi", "vel", 
        "ligula", "vitae", "arcu", "aliquet", "mollis", 
        "etiam", "vel", "erat", "placerat", "ante", 
        "porttitor", "sodales", "pellentesque", "augue", "purus"}; 

    private TextView selection; 

    @Override 
    public void onCreate(Bundle icicle) { 
     super.onCreate(icicle); 
     setContentView(R.layout.main); 
     setListAdapter(new ArrayAdapter<String>(this, 
               android.R.layout.simple_list_item_multiple_choice, 
               items)); 
     selection = (TextView)findViewById(R.id.selection); 

    } 

    public void listSelected(View view) { 
     long[] chosenOnes = getListView().getCheckedItemIds(); 
     selection.setText("Items selected: "); 
     selection.setText(Integer.toString(chosenOnes.length)); 
     for (long x:chosenOnes) { 
      int i = Long.valueOf(x).intValue(); 
      selection.setText(selection.getText() + ", " + items[i]);   
     } 

    } 

} 

答えて

12

参照してください:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" > 
    <TextView 
     android:id="@+id/selection" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" /> 
    <Button 
     android:id="@+id/getSelections" 
     android:text="Show Selections" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:onClick="listSelected" /> 
    <ListView 
     android:id="@android:id/list" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:drawSelectorOnTop="false" 
     android:choiceMode="multipleChoice" /> 
</LinearLayout> 

そしてここでは、関連するJavaである:ここでは

はレイアウトxmlファイルである(FYIコードは、グラント・アレンによってアンドロイド4を最初から修正プログラムです) docの場合、メソッドgetCheckedItemIds()は、アダプタに安定したIDがある場合にのみ有効な結果を返します。代わりに、これはあなたを助ける

SparseBooleanArray array = this.getListView().getCheckedItemPositions();

希望=)

+0

素晴らしい、おかげでそのための束を使用することができます。フォローアップとして、私はちょうど正確にIDを安定させるものについて何らかの明確化を求めることができます。 –

+0

ええ、私も知りたいです。私はそれは各IDが常に同じオブジェクトに対応していることを推測していますが、ドキュメントはまったく明確ではありません。 – Timmmm

+3

たとえば、BaseAdapterのhasStableIds()メソッドをオーバーライドし、getId()が正しく実装されている場合はtrueを返すことができます。 – Ostkontentitan

関連する問題