2012-08-27 78 views
2

我正在做一個項目,我是一個使用自定義列表視圖,其中包含一個textview。數據來自服務器。我想根據數據大小更改單元格的高度。如果內容超過兩行,我必須將其修剪爲兩行,並顯示查看更多按鈕。點擊查看更多按鈕展開單元格以顯示完整的詳細信息。我使用Google搜索了一下。但我找不到任何有用的資源。任何人都可以幫助我解決這個問題,任何有用的鏈接或建議?'根據內容大小動態增加Android列表視圖中單元格的大小?

回答

0

一種方法是首先使listView失效,迫使它重繪可見元素,然後處理您的適配器的getView方法中的佈局更改。
試試這個:
添加一個showTrimmed(int位置,布爾值)方法到您的適配器。這將更新適配器內部的結構,以跟蹤要修剪或不修剪的列表項。然後,在getView方法中,創建項目視圖時,測試是否應修剪當前元素,並根據創建適當視圖的結果進行測試。 我做了類似的工作,實現了不同但相似的結果,並且工作正常。 記得在調用showTrimmed之後調用invalidate來強制listView重繪顯示的項目。

編輯:我後我的代碼是你想要做什麼不同,但它在思想頗爲相似:

public class HeroListViewAdapter extends ArrayAdapter<Hero> { 

public static int NO_POS = -1; 

private List<Hero> heroes; 
private int selected_pos = NO_POS; 

public HeroListViewAdapter(Context context, List<Hero> heroes){ 
    super(context, R.layout.hero_list_item_view, heroes); 
    this.heroes = heroes; 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    View rowView = GuiBuilder.createHeroListItemView(heroes.get(position),getContext(),parent,false); 
    if(position == selected_pos){ 
     rowView.setBackgroundColor((rowView.getResources().getColor(R.color.list_item_selected_color))); 
    } 
    return rowView; 
} 

public void setSelectedPosition(int selected_pos){ 
    this.selected_pos = selected_pos; 
} 

public int getSelectedPosition(){ 
    return selected_pos; 
} 

public Hero getSelectedHero(){ 
    if(selected_pos>=0 && selected_pos<heroes.size()) 
     return this.getItem(selected_pos); 
    else 
     return null; 
} 

} 

,而不是setSelectedPosition你應該有showTrimmed方法,更新內部成員作爲setSelectedPos這樣做是爲了跟蹤每個列表項的修剪狀態。然後在getView方法中進行測試(就像我在if(position == selected_pos)中那樣),然後根據測試結果構建自定義修剪或未修剪的列表項。我使用這些功能的聽衆是:

listView.setOnItemClickListener(new AdapterView.OnItemClickListener(){ 
    public void onItemClick(AdapterView<?> parent, View view, int position, long id){ 
     list_adapter.setSelectedPosition(position); 
     listView.invalidate(); 
     } 
    } 
); 

您可以嘗試更新此想法以滿足您的需求。特別是在我的情況下,我這樣做的目的是通過編程改變它的背景來突出顯示點擊的listview項目。

+0

嗨,我沒有得到你完全...你可以粘貼相關的代碼,如果可能 –

+0

我張貼我的代碼。看一看,看看你是否能夠將這個想法適應你的需求。 –

相關問題