1

各項目にサブヘッダーを付ける、非常に基本的な ListView ダイアログを作成しようとしています。この目的のために、List(Map(String,String)) 用のアダプターで simple_list_item_2 レイアウトを使用しようとしています。コードは次のとおりです。

public static class StoreList extends DialogFragment {
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        final List<Map<String, String>> data = new ArrayList<Map<String, String>>();

        // Dummy data
        Map<String, String> datum = new HashMap<String, String>();
        datum.put("name", "Name1");
        datum.put("address", "USA");
        data.add(datum);
        Map<String, String> datum2 = new HashMap<String, String>();
        datum.put("name", "Name2");
        datum.put("address", "CAN");
        data.add(datum2);

        // Adapter for the ListView:
        SimpleAdapter adapter = new SimpleAdapter(
                getActivity(), 
                data,
                android.R.layout.simple_list_item_2,
                new String[] {"name", "address"},
                new int[] {android.R.id.text1, android.R.id.text2});

        // Listener for the ListView:
        DialogInterface.OnClickListener listener = new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {
                Intent i = new Intent(getActivity(), StoreActivity.class);
                Map<String, String> listItem = data.get(which);
                i.putExtra("name", listItem.get("name"));
                i.putExtra("address", listItem.get("address"));
                startActivity(i);
            }
        };

        // Build the ListView dialog:
        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
        builder.setTitle(R.string.storeListTitle);
        builder.setAdapter(adapter, listener);
        return builder.create();
    }
}

実行すると、結果は次のようになります。

http://i.imgur.com/8gkTECe.png

ご覧のとおり、4 つのテキスト文字列のうち 1 つだけが表示されています。何が起きてる?

4

1 に答える 1

1

datum2 ではなく、datum に値を設定しています。

   // Dummy data
Map<String, String> datum = new HashMap<String, String>();
datum.put("name", "Name1");
datum.put("address", "USA");
data.add(datum);
Map<String, String> datum2 = new HashMap<String, String>();
datum.put("name", "Name2"); //should be datum2
datum.put("address", "CAN"); //should be datum2
data.add(datum2);
于 2013-07-08T22:36:55.857 に答える