如何将切换小部件添加到列表视图中的行?

时间:2014-11-08 10:31:08

标签: android

我已经按照Android面试教程创建了一个自定义ListView。这是链接: http://www.androidinterview.com/android-custom-listview-with-image-and-text-using-arrayadapter/

我想将一个切换小部件添加到ListView的第一行。怎么能只在1行或某些特定行上进行,如第1,第4,第7,第16等?

3 个答案:

答案 0 :(得分:2)

如果您不熟悉listViews,那么简单的答案就是:

  1. 在您的基本布局中放置一个开关。布局文件是xml文件,其id为R.layout.mylist,在您链接的示例中。

  2. 为每个不位于0的位置隐藏开关,否则显示。由于视图回收,您无法依赖默认设置,因此您必须隐藏或显示。

  3. 更高级的答案是:

    1. 使用基本适配器,因为它具有方法getViewType和getViewTypeCount(数组适配器不具有)。您必须编写数组和视图元素之间的关系,如果您不熟悉listViews / adapters,那么这可能太令人生畏了。

    2. 创建两个布局(xml文件),一个带开关。

    3. 覆盖getViewType和getViewTypecount。

    4. 现在有两种视图类型,因此getViewTypeCount应返回2,并且getViewType应为每个非位置0的位置返回0,并为其余位置返回1.

      1. 在getView中,如果为null,则使用正确的布局来扩展convertView。您可以调用getViewType(position)并打开结果。
      2. 这样做的好处是适配器只会将正确的视图类型传递给适配器,因此每次调用getView时都不必隐藏/取消隐藏开关。 Android只制作一个有开关的布局。因此,它更有效率。

答案 1 :(得分:0)

您可以将另一个参数发送到listview的适配器,并在适配器中生成条件

if(parameter == 1)

{Show Switch}

答案 2 :(得分:0)

我已经修改了我的布局以将开关小部件添加到所有行,然后我为每行中的每个开关设置了可见性为“GONE”,除了第一行。

public View getView(int position,View view,ViewGroup parent) {
    LayoutInflater inflater = context.getLayoutInflater();
    View rowView = inflater.inflate(R.layout.mylist, null,true);
    Switch mSwitch = (Switch) rowView.findViewById(R.id.switch1);

    if(position != 0) {
        mSwitch.setVisibility(View.GONE);
    }

    return rowView;
};