2017-04-26 6 views
0

Androidとjavaを学びたいと思っています.ExplandableListViewsで問題が発生しています。Android ExpandableListView getChildViewがデータの混乱を招く

私はそれの下にいくつかのeditTextsとtextViewsを持つExpandablelistviewを作ろうとしています。 1から20までのグループがあり、各グループには3つのeditTextと1つのtextViewがあります。

私は起動時にデータベースからデータを取り込み、ユーザーがデータを変更したら元に戻します。私はそれをやろうとしましたが、そのデータはすべての場所にあるようです。簡単なテスト:

  • 1子各
  • は、すべてのグループの各EDITTEXT
  • 崩壊にデータを追加し、最初の1

に彼らに最後の1を拡張し、3グループを追加します - >結果はそのグループであります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

関連する問題