如何通过外部按钮在列表视图中设置可见性?
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.INVISIBLE
和View.VISIBLE
【讨论】:
我没有隐藏整个列表视图【参考方案2】:在决定按钮的OnClickListener()
中,再次为列表设置适配器。
并在列表之外保留一个公共布尔变量,以通过验证布尔变量来决定特定按钮的可见性。
【讨论】:
【参考方案3】:on button click
事件添加
yourListView.setVisiblity(View.INVISIBLE);
隐藏列表视图
【讨论】:
我没有隐藏整个列表视图【参考方案4】:我有一个自定义列表视图,其中一行上有 1 个按钮,我想添加一个 Listview 外部的按钮以设置所有按钮的可见性 rows 我怎样才能做到这一点?
我不想使用 notifyDataSetChanged 重新加载所有数据 有这个想法吗??
创建包含 ListView 和 Button 的布局。 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);
);
注意:INVISIBLE
和GONE
的区别在于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
【讨论】:
以上是关于如何通过外部按钮在列表视图中设置可见性?的主要内容,如果未能解决你的问题,请参考以下文章