Android listview隐藏按钮

时间:2015-04-28 03:27:06

标签: android listview button

我有一个问题,如何使用SimpleAdapter隐藏列表视图中特定行中的按钮。这是我的示例代码。

alert_noti_layout.xml

<?xml version="1.0" encoding="utf-8"?>
<ListView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/listView1"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

</ListView>

alert_pop_list.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"

    >

    <TextView
        android:id="@+id/view1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="view1"

        android:textSize="20dp"
        android:textStyle="bold"
        android:layout_alignParentTop="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_toLeftOf="@+id/confirm"
        android:layout_toStartOf="@+id/confirm" />

    <TextView
        android:id="@+id/view2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="TextView"

        android:textSize="10dp"
        android:textStyle="bold"
        android:visibility="visible"
        android:layout_below="@+id/view1"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_toLeftOf="@+id/confirm"
        android:layout_toStartOf="@+id/confirm" />

    <Button
        style="?android:attr/buttonStyleSmall"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/confirm"
        android:layout_alignBottom="@+id/view2"
        android:layout_alignParentTop="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true"
        android:background="@drawable/ic_confirm" />

</RelativeLayout>

Activity :

 List<Map<String, String>> listData = new ArrayList<Map<String, String>>();
 Map<String, Object> names = new HashMap<String, Object>();

 names.put("First","head1");
 names.put("Second", "txt1");

 names.put("First","head2");
 names.put("Second", "txt2");

 names.put("First","head3");
 names.put("Second", "txt3");
...

 listData.add((HashMap) names);
 ListView lv = (ListView) dialog_mail.findViewById(R.id.listView1);
                   // ArrayAdapter<String> adapter = new ArrayAdapter<String>(home.this,, android.R.layout.two_line_list_item, names);
 SimpleAdapter adapter = new SimpleAdapter(home.this, listData,
 R.layout.alert_pop_list,
 new String[] {"First", "Second" },
 new int[] {R.id.view1, R.id.view2});
 lv.setAdapter(adapter);

如果值为head2,我如何隐藏按钮并显示给列表的其余部分。

1 个答案:

答案 0 :(得分:1)

您需要自定义BaseAdapter而不是SimpleAdapter并使用getView()方法编写一些代码。就像:

public View getView(int p,View view,ViewGroup parent) {
   if (view == null) {
        view = LayoutInflate.xxxx;
   }
   Button btn = (Button) view.findViewById(R.id.btn);
   DataModel d = list.get(p);
   if (d.isHidden || d.data.equals("head2")) {
      btn.setVisibility(View.GONE);
   } else {
      btn.setVisibility(View.visible);
   }
   return view;
}

所以你需要创建一个DataModel来存储一些属性。

public class DataModel {
    public boolean isHidden;
    public HashMap<String,String> dataMap;
    //and so on.....
}