如何通过外面的按钮在列表视图中设置可见性?

时间:2013-11-27 09:01:10

标签: android listview button visibility

我有一个自定义Listview,其中一行Button 我想在Listview之外添加一个按钮,以设置所有行上按钮的可见性 我怎样才能做到这一点?

我不想使用重新加载所有数据的notifyDataSetChanged 任何人都知道这个??

<?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" >

    <TextView
        android:id="@+id/notice_title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="#000000"
        android:textSize="16dp" />

    <TextView
        android:id="@+id/notice_date"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/notice_title"
        android:textSize="8dp" />

    <ImageButton 
        android:id="@+id/btn_delete"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@drawable/btn_delete"
        android:layout_alignParentRight="true"
        android:layout_alignParentBottom="true"
        android:visibility="invisible" />

</RelativeLayout>
  

Adapter_notice.java

public class Adapter_notice extends ArrayAdapter<notice> {

    private Context context; 
    private int listRow;    
    private notice[] notice; 
    public List<String> listTag = new ArrayList<String> ();


    public Adapter_notice(Context context, int listRow, notice[] Rows) {
        super(context, listRow, Rows);
        this.listRow = listRow;
        this.context = context;
        this.notice = Rows;

    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View row;
        //Log.d("edittext", "items !empty="+listTag.contains(listTag.get(position)));
        LayoutInflater inflater = LayoutInflater.from(context);

            row = inflater.inflate(listRow,parent, false);
            notice row_notice = notice[position];
            TextView tv1 = (TextView) row.findViewById(R.id.notice_title);
            tv1.setText(row_notice.gettitle());
            TextView tv2 = (TextView) row.findViewById(R.id.notice_date);
            tv2.setText("Date:"+row_notice.getdate());
            ImageButton btn = (ImageButton) row.findViewById(R.id.btn_delete);

        return row;
    }
}

5 个答案:

答案 0 :(得分:3)

  

我有一个自定义列表视图,其中一行有1个按钮,我想添加一个   Listview外部的按钮可以设置所有按钮上的可见性   行如何实现这一目标?

     

我不想使用notifyDataSetChanged重新加载所有数据任何人   知道了这个??

创建包含 ListView 按钮的布局。 ListView已将高度设置为WRAP_CONTENT。 然后为Button创建onClickListener,onClick()隐藏ListView:

btn.setOnClickListener(new View.OnClickListener {
   public void onClick(View v) {
       if (listView.getVisibility() == ListView.VISIBLE) {
          listView.setVisibility(ListView.INVISIBLE);
       }
       else {
          listView.setVisibility(ListView.VISIBLE);
       }
   }
});

注意: INVISIBLEGONE之间的区别在于GONE属性不会在布局中发生。

答案 1 :(得分:1)

on button click事件添加

yourListView.setVisiblity(View.INVISIBLE);

隐藏列表视图

答案 2 :(得分:1)

在列表外按钮的onClick()上,执行类似

的操作
listview.setAdapter(changedAdapter) 

其中changedAdapter将是一组新的适配器OR

    adapter.setButtonVisibility(false);
    listview.setAdapter(adapter). 

在Adapter类中创建一个新方法,该方法根据getView将返回视图设置一个布尔值(如果boolean为true,则Button字段将变为不可见)

public void setButtonVisibility(boolean hideButton){
    this.hideButton = hideButton;
}

getView(){
...
if(hideButton){
    //hide button
}
}

答案 3 :(得分:0)

使用

ListView.setVisibility(View.GONE / View.VISIBLE / View.INVISIBLE);

由于您希望暂时disable可见度使用View.INVISIBLEView.VISIBLE

答案 4 :(得分:0)

在决策按钮的OnClickListener()中,再次为列表设置适配器。 并在List之外保留一个公共布尔变量,通过验证布尔变量来决定特定按钮的可见性。