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

Posted

技术标签:

【中文标题】如何通过外部按钮在列表视图中设置可见性?【英文标题】:How to setVisibility in a listview by a button outside it? 【发布时间】:2013-12-12 19:43:58 【问题描述】:

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

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

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_
    android:layout_ >

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

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

    <ImageButton 
        android:id="@+id/btn_delete"
        android:layout_
        android:layout_
        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;
    

【问题讨论】:

【参考方案1】:

使用

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

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

【讨论】:

我没有隐藏整个列表视图【参考方案2】:

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

【讨论】:

【参考方案3】:

on button click事件添加

yourListView.setVisiblity(View.INVISIBLE);

隐藏列表视图

【讨论】:

我没有隐藏整个列表视图【参考方案4】:

我有一个自定义列表视图,其中一行上有 1 个按钮,我想添加一个 Listview 外部的按钮以设置所有按钮的可见性 rows 我怎样才能做到这一点?

我不想使用 notifyDataSetChanged 重新加载所有数据 有这个想法吗??

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

【讨论】:

【参考方案5】:

在列表外按钮的onClick()中,做类似

listview.setAdapter(changedAdapter) 

changedAdapter 将是一组新的适配器或

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

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

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


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


【讨论】:

以上是关于如何通过外部按钮在列表视图中设置可见性?的主要内容,如果未能解决你的问题,请参考以下文章

在按钮上单击列表视图中列的可见性应设置为 false

在活动中更改列表视图的按钮可见性

如何在阵列适配器中长按时设置按钮的可见性

ListView 使 textview 在超出屏幕可见性时可见

设置可见性时 XML 列表视图重叠元素

如何在不向它们提供 ID 的情况下更改按钮单击时 textview 的可见性?