![](/img/trans.png)
[英]How to increase the Height of Fragment dynamically based on the size of List View inside it
[英]Dynamically increase the size of the cell in a list view in Android based on Content size?
我正在做一個使用自定義列表視圖的項目,其中包含一個textview。 數據來自服務器。 我想根據數據大小更改單元格的高度。 如果內容多於兩行,我必須將其修剪成兩行並顯示“ 查看更多”按鈕 。 單擊查看更多按鈕后,展開單元格以顯示完整詳細信息。 但是我找不到任何有用的資源。任何人都可以幫助我解決這個問題,任何有用的鏈接或建議嗎?
一種方法是首先使listView無效,強制其重新繪制可見元素,然后在適配器的getView方法中處理布局更改。
嘗試這個:
將showTrimmed(int position,boolean value)方法添加到您的適配器。 這將更新適配器內部的結構,以跟蹤要修剪或不修剪的列表項。 然后在getView方法中,在創建項目視圖時,測試是否應修剪當前元素,並根據結果創建正確的視圖。 我做了一些類似的事情來獲得不同但相似的結果,並且有效。 請記住在調用showTrimmed強制listView重繪顯示的項目后調用invalidate。
編輯:我發布了與您想要執行的代碼不同的代碼,但是其思路非常相似:
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();
}
}
);
您可以嘗試根據需要更新此想法。 特別是在我的情況下,我這樣做是通過以編程方式更改其背景來突出顯示單擊的列表視圖項。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.