为了实现点击item中某个TextView,展示此item隐藏的布局,再点击,隐藏这个展开的布局这个功能,我在adapter的getVIew()里给TextView加了一个点击事件。
textView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (ruleView.getVisibility() == View.VISIBLE) {
ruleView.setVisibility(View.GONE);
} else {
ruleView.setVisibility(View.VISIBLE);
}
});
看起来蛮正常的显示:
当我点击“使用规则”的时候会展开item的下半部分:
就出现了,最下边的item有部分被挤出屏幕的情况。
当时,第一个想到的解决办法是,在点击事件,让ListView重绘高度。这个方法虽然可行,但感觉杀鸡用牛刀了。
那么我就想到了第二种方法,众所周知ListView有个notifyDataSetChanged()方法。这个方法是数据改变时调用则会刷新整个ListView。怎么能让我点击时改变数据呢?我想到了在“对象”里增加变量,用一个boolean类型判断是展示还是隐藏。
举个例子:
我有一个xxxEntity类,我在其中增加了变量isShowRule
public class xxxEntity {
private String xxx;
private String xxx;
private String xxx;
private String xxx;
private String xxx;
private String xxx;
/*是否显示规则布局 属于ui程序使用的变量 和业务无关*/
private boolean isShowRule;
}
当我在点击“使用规则”的时候,在点击事件里就给isShowRule赋值。然后调用notifyDataSetChanged()。并在getVIew()里通过判断isShowRule的值来改变ui的展示或者隐藏。相比之下,比起重绘ListVIew的高度还是比较简单也易于理解好多啦。