當(dāng)ListView的item點(diǎn)擊展開其下半部分,但ListView高度無變化,導(dǎo)致最后的item被擠出屏幕

為了實(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的高度還是比較簡單也易于理解好多啦。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容