稀疏数组作为单选ListView

时间:2013-04-18 06:35:29

标签: android listview

我从服务器检索了以下数据:

[
  {id: 8, name: "Item1"},
  {id: 14, name: "Item2"},
  {id: 30, name: "Item3", active: true},
  {id: 42, name: "Item4"}
]

我想将这些数据放入单选ListView(在Dialog中,使用setSingleChoiceItems()),在用户做出选择后,将项目ID发送回服务器。

怎么做?我想出的唯一解决方案是使用一些辅助数组,它保持列表项(AFAIK必须按顺序排列)和项目ID(几乎是随机的)之间的映射。我也试过使用一些适配器,但没有弄清楚如何。

2 个答案:

答案 0 :(得分:0)

创建自己的自定义ListView并覆盖getView以显示每行中您想要的任何内容。您将需要一个ViewHolder类来提取您所做的自定义行列表视图。看看这个:

Single choice ListView custom Row Layout

答案 1 :(得分:0)

此处示例使用单选列表视图:

main.xml中:

<?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">
     <ListView
        android:id="@+id/listview1"
        android:cacheColorHint="#00000000"
        android:scrollbars="none"
        android:fadingEdge="vertical"
        android:soundEffectsEnabled="true"
        android:dividerHeight="1px"
        android:padding="5dip"
        android:smoothScrollbar="true"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:drawSelectorOnTop="false"
        android:layout_marginLeft="10dip"
        android:layout_marginRight="10dip"
        android:layout_marginBottom="10dip"
        android:layout_weight="1"/>

</LinearLayout>

的活动:

    String[] items = new String[] { "Item1", "Item2", "Item3", "Item4" };
    int[] itemsIds = new int[] { 8, 14, 30, 42 };
    ListView listView = (ListView)findViewById(R.id.listview1);
    listView.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_single_choice, android.R.id.text1, items));
    listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
    listView.setOnItemClickListener(new OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position,
                long id) {
            //here send your item id itemsIds[position]
        }
    });