2015-09-25 133 views
0

如何根據位置更改持有者內部視圖的屬性? 此問題僅在使用具有數據持有者類的回收 時纔會出現。我可以根據位置爲每個不同的文本視圖設置不同的標題,但我無法根據位置更改每個文本視圖的文本大小。如何在自定義列表視圖中保留視圖的特定屬性

當然與recycleView = false它工作得很好,因爲意見不會被回收,但如何使它與回收商合作?

boolean recycleView = false; 
ArrayList<SocialItem> list; 

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

    ViewHolder holder = null; 
    if (convertView == null || !recycleView) { 

     LayoutInflater mInflater = (LayoutInflater) context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE); 
     convertView = mInflater.inflate(R.layout.social_list_item, null); 

     holder = new ViewHolder(); 
     holder.title1 = (TextView) convertView.findViewById(R.id.si_title1); 
     convertView.setTag(holder); 

    } else { 
     holder = (ViewHolder) convertView.getTag(); 
    } 

    holder.title1.setText(list.get(position).getTitle1()); 

    //changes textsize of textview to fit in specific width, and saves in our holder list, and sets from it in textview 
    list.get(position).setTxtSize1(Util.correctTVWidth(holder.title1, 110)); 
    holder.title1.setTextSize(TypedValue.COMPLEX_UNIT_PX, list.get(position).getTxtSize1()); 

    return convertView; 
} 

翠鳥福作品的解決方案,但爲什麼下面的代碼將無法正常工作? 我認爲它所做的是,它將計算的文本大小保存在一個基於位置的簡單pojo持有者中,並且從它的視圖中設置文本大小,它不應該工作嗎?

//changes textsize of textview to fit in specific width, and saves in our holder list, and sets from it in textview 
    list.get(position).setTxtSize1(Util.correctTVWidth(holder.title1, 110)); 
    holder.title1.setTextSize(TypedValue.COMPLEX_UNIT_PX, list.get(position).getTxtSize1()); 
+0

你的函數Util.correctTVWidth(holder.title1,110)'做了什麼? –

+0

返回調整的文本大小,以適應文本視圖,如果文本很長 – winchester

回答

1

如果我沒有誤解,你需要改變視圖在特定的位置,對吧?如果這是你想要的,你可以做到。爲什麼不?請看下面的例子:

if(position == somePositionYouWant){ // change textsize at specific position 
    holder.yourTextView.setTextSize(yourtextSize); 
}else{ 
    // you must reset your textsize in other position or everything will be mess 
    holder.yourTextView.setTextSize(defaultTextSize); 
} 

如果我是正確的,你用Util.correctTVWidth(holder.title1, 110)計算textsize。但是,您應該記住convertView被重用。這意味着如果任何行不可見,它將被重用於下一個可見視圖。例如,列表視圖中的10個項目是可見的,當您向下滾動時,將顯示11(12)個項目並重新使用第1個項目的視圖,並且TextView屬性與第1個項目保持不變。如果你根據第11項第1項的holder.title1計算文字大小,也許這就是你的代碼無效的原因。

+0

是的工作,請參閱我編輯的問題 – winchester