2017-04-26 79 views
0

我想學習Android和Java,並且遇到了與ExpandableListViews的困難。Android ExpandableListView getChildView使數據混亂

我正在試着製作一個Expandablelistview,它下面有一些editTexts和textViews。我可以有1到20個組,每組有3個editText和一個textView。

我想在啓動時從數據庫填充數據,並且在用戶修改數據時將其保存回來。我試圖做到這一點,但數據似乎是所有的地方。簡單的測試:

  • 添加3組,1名兒童每
  • 每個EDITTEXT
  • 收起添加數據的所有團體和擴大他們最後一個第一個

- >結果是該組1和2將具有與最後一組相同的數據!這讓我瘋狂!有人能告訴我我做錯了什麼嗎?

這是我的getChildView,它非常非常簡單。

public View getChildView(final int groupPosition, final int childPosition, 
         boolean isLastChild, View convertView, ViewGroup parent) { 


    if (convertView == null) { 
     ViewHolder holder = new ViewHolder(); 
     Log.i("Main", "Creating new viewHolder for " + groupPosition+childPosition); 
     convertView = minflater.inflate(R.layout.childrow, null); 

     holder.text1 = (EditText) convertView.findViewById(R.id.rpsinSet); 
     holder.text2 = (EditText) convertView.findViewById(R.id.wtForSet); 
     holder.text3 = (EditText) convertView.findViewById(R.id.rstForSet); 
     holder.No = (TextView) convertView.findViewById(R.id.NoTextView); 

     holder.No.setText("Set " + (childPosition + 1)); 
     holder.text1.setText(""+Sets.get(groupPosition).get(childPosition).getRps()); 
     holder.text2.setText(""+Sets.get(groupPosition).get(childPosition).getWt()); 
     holder.text3.setText(""+Sets.get(groupPosition).get(childPosition).getRst()); 


     convertView.setTag(holder); 
    } else { 
     Log.i("Main", "Recovering viewHolder for " + groupPosition+childPosition); 
     ViewHolder holder = (ViewHolder) convertView.getTag(); 
     holder.text1 = (EditText) convertView.findViewById(R.id.rpsinSet); 
     holder.text2 = (EditText) convertView.findViewById(R.id.wtForSet); 
     holder.text3 = (EditText) convertView.findViewById(R.id.rstForSet); 
     holder.No  = (TextView) convertView.findViewById(R.id.NoTextView); 
    } 
    return convertView; 
} 

這是我ViewHolder:

static class ViewHolder { 
    EditText text1; 
    EditText text2; 
    EditText text3; 
    TextView No; 
} 

我沒加的數據庫調用,因爲他們是不相關的。我甚至無法立即開始工作。

+0

你沒有在'else'語句中設置你的視圖,你必須設置它。 –

回答

1

我想張貼此評論,但我沒有足夠的聲譽。無論如何,我會盡量不檢查convertView是否爲null,但我會一直重新創建它,因爲每當你展開或關閉一個組時,列表就會被重新創建,也許它會重複使用每個單元的相同視圖,這可能是你在不同的行中擁有相同的數據。

+0

偉大的一點。在做這件事之前,我正在做你剛剛提出的建議。之所以選擇這種方式,是因爲我無法使TextWatcher工作,並且我在某處讀到這會是更好的方式,但顯然我無法使其工作。我會再試一次並更新我的進度。否則,我可能不得不在TextWatcher上獲得幫助。 – Arn