為了實(shí)現(xiàn)點(diǎn)擊item中某個TextView,展示此item隱藏的布局,再點(diǎn)擊,隱藏這個展開的布局這個功能,我在adapter的getVIew()里給TextView加了一個點(diǎn)擊事件。
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);
}
});
看起來蠻正常的顯示:

Paste_Image.png
當(dāng)我點(diǎn)擊“使用規(guī)則”的時候會展開item的下半部分:

Paste_Image.png
就出現(xiàn)了,最下邊的item有部分被擠出屏幕的情況。
當(dāng)時,第一個想到的解決辦法是,在點(diǎn)擊事件,讓ListView重繪高度。這個方法雖然可行,但感覺殺雞用牛刀了。
那么我就想到了第二種方法,眾所周知ListView有個notifyDataSetChanged()方法。這個方法是數(shù)據(jù)改變時調(diào)用則會刷新整個ListView。怎么能讓我點(diǎn)擊時改變數(shù)據(jù)呢?我想到了在“對象”里增加變量,用一個boolean類型判斷是展示還是隱藏。
舉個例子:
我有一個xxxEntity類,我在其中增加了變量isShowRule
public class xxxEntity {
private String xxx;
private String xxx;
private String xxx;
private String xxx;
private String xxx;
private String xxx;
/*是否顯示規(guī)則布局 屬于ui程序使用的變量 和業(yè)務(wù)無關(guān)*/
private boolean isShowRule;
}
當(dāng)我在點(diǎn)擊“使用規(guī)則”的時候,在點(diǎn)擊事件里就給isShowRule賦值。然后調(diào)用notifyDataSetChanged()。并在getVIew()里通過判斷isShowRule的值來改變ui的展示或者隱藏。相比之下,比起重繪ListVIew的高度還是比較簡單也易于理解好多啦。