2014-10-08 85 views
2

朋友,Android的可擴展列表組的TextView隨機更換

我有擴展列表一個問題 - 首次列表組繪製正確,(各textViews文本會被替換,如3的9)但是當任何組被點擊時,另一個組(隨機)的textView被替換,而不是原始的mm

correct

faulty

應該做些什麼來防止這種情況?

這裏是適配器類:

public class InterestListAdapter extends BaseExpandableListAdapter 
{ 
... 
@Override 
public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) 
{ 
    if (convertView == null) 
    { 
     convertView = LayoutInflater.from(_context).inflate(R.layout.activity_interest_list_group, parent, false); 
    } 

    try 
    { 
     HashMap<String, String> interest = this._listDataHeader.get(String.valueOf(groupPosition)); 

     String interestId = interest.get("interest_id"); 
     String interestName = interest.get("interest_name"); 

     JSONObject interestsTree = new JSONObject(library.loadString(_context, "userInterestsTree")); 

     TextView listGroupName = (TextView) convertView.findViewById(R.id.interest_list_group_name); 
     listGroupName.setText(interestName); 

     if (this._listDataChild.containsKey(String.valueOf(interestId))) 
     { 
      String subinterestAll = String.valueOf(this._listDataChild.get(String.valueOf(interestId)).size()); 

      if (interestsTree.has(interestId)) 
      { 
       String subinterestChecked = interestsTree.getString(interestId); 
       TextView subinterestText = (TextView) convertView.findViewById(R.id.interest_list_group_selected); 
       subinterestText.setText(subinterestChecked + " of " + subinterestAll); 
      } 
     } 
    } 
    catch (Exception e) 
    { 
     Log.e("error", Log.getStackTraceString(e)); 
    } 

    return convertView; 
} 
} 

回答

1

我相當肯定,您有內存管理的問題。當你展開你的列表時,一些單元格會從屏幕上隱藏起來。之後,當您滾動它時,必須重新生成它們。爲了節省內存,Android OS不會從頭開始生成它們,而是使用用於隱藏單元的相同內存區域。

它看起來像subinterestText是有問題的領域。

if (this._listDataChild.containsKey(String.valueOf(interestId))) 

if (interestsTree.has(interestId)) 

如果其中一個是假的,subinterestText變量將不會被設置:如果這兩個IFS是真實的它被只設置。因此,結果將使用以前隱藏字段的值 - 在您的情況下 - 2中的2個。

要修復它 - 總是在getGroupView方法中設置您的單元格的所有值。