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



我有一个自定义Listview,其中一行有1个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;
    }
}

我有一个自定义Listview,在行上有一个按钮,我想添加一个按钮,以设置所有rows我怎样才能做到这一点?

我不想使用notifyDataSetChanged来重新加载所有数据Anyone知道这个吗??

创建包含ListViewButton的布局。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属性不发生在布局中。

在列表外按钮的onClick()中,执行类似的操作

listview.setAdapter(changedAdapter) 

其中更改适配器将是一套新的适配器或

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

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

public void setButtonVisibility(boolean hideButton){
    this.hideButton = hideButton;
}
getView(){
...
if(hideButton){
    //hide button
}
}

使用

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

由于您想暂时使用disable,因此可见性使用View.INVISIBLEView.VISIBLE

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

on button click事件添加

yourListView.setVisiblity(View.INVISIBLE);

隐藏列表视图

最新更新