【问题标题】: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_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;
    }
}

【问题讨论】:

    标签: android listview button visibility


    【解决方案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
        }
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-01-23
          • 2013-07-19
          • 2015-03-22
          • 2011-09-02
          • 1970-01-01
          • 2014-08-04
          相关资源
          最近更新 更多