2015-12-17 54 views
0

正如您應該知道的那樣,ListView可以回收視圖。但是我想要使用可以單擊和展開的元素。就像我已經做了: ListView和它的「怪異」行爲。我該如何解決這種情況?

但它完全搞砸了,即使使用:

View checklayout = convertView; 
if(checklayout == null){ 
     checklayout = inflater.inflate(R.layout.home_cell, null); 
    } 

當一些擴張開看法熄滅屏幕,再生一個,這不應該是可擴展的,收到消失的佈局。只有擁有「1AVALIAÇÃOLANÇADA」的視圖才能打開並顯示其內容。我通過使用if(qtdAvaliacoes > 0)來添加此內容,這是我的對象的一個​​屬性,它來自ArrayList <>。

我 「解決」 這個禁用回收,具有:

@Override 
public int getViewTypeCount() { 
    return getCount(); 
} 

@Override 
public int getItemViewType(int position) { 
    return position; 
} 

一旦我的ListView將只接收5〜10行。但我知道這不是一個好的做法。雖然我書面方式這個問題,我找到了解決辦法,打電話給我對象之前充氣任何視圖,然後檢查屬性:

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 

    View checklayout = convertView; 
    final LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    final Disciplina disciplina = lista.get(position); 

    if(checklayout == null || disciplina.getQtdAvaliacoes() == 0){ 
     checklayout = inflater.inflate(R.layout.home_cell, null); 
    } 

    final View layout = checklayout; 

但我不認爲這是做到這一點的最好辦法。我讀了一些關於標籤的內容,但是很困惑。我想如果我可以將這些onClick方法綁定到行位置,它會更好。

任何想法?或者,我的解決方案對你來說是開發商的觀點。 謝謝。

回答

0

最簡單的方法是不要在列表項中進行子練習。而不是通過視圖可見性來做到這一點,如果你不想讓它顯示出來,那麼使得膨脹的部分變爲無效。您只需在每次調用getView時明確設置該視圖的可見性

+0

它不會讓我的應用程序加載更多數據嗎?因爲用戶不會總是需要這些表。此外,表格是動態填充的。謝謝 ! –

+0

這將需要你有更多的意見。儘管最初的充氣時間會增加一點,但實際的數據差異很小。 perf可能會有輕微的打擊,但幾乎找到的任何解決方案都會打到循環視圖,這通常很難做到。另一種做法是擁有2種視圖類型 - 完全充氣的視圖類型和不充氣的視圖類型,並跟蹤哪些項目應該膨脹或不膨脹。這是更多的工作,但會降低大部分性能(儘管最終可能需要更多數據,具體取決於回收商的持有量)​​。 –

相關問題