既に膨張したレイアウトに複数のテキストビューを追加しようとしています。表示される情報はデータベースから取得され、データベースの行ごとに 1 つのテキストビューが作成されます。データベースは非常に大きくなる可能性があるため、バックグラウンド スレッドで各テキストビューを一度に 1 つずつ作成し、それをフォアグラウンドに追加します。
以下は、フォアグラウンドを更新するためにバックグラウンド スレッドで呼び出される関数です。
private TextView temp;
private void addClickableEvent(ReviewHistoryEvent e){
if(e == null){
Log.e(tag,"Attempted to add a null event to review history");
return;
}
TextView t = new TextView(getBaseContext());
t.setTag(e);
t.setText(e.getTime()+" "+e.getEvent());
t.setClickable(true);
t.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
t.setTextAppearance(getBaseContext(), R.style.Information_RegularText);
t.setGravity(Gravity.CENTER);
t.setOnClickListener(this);
temp = t;
runOnUiThread(new Runnable() {
public void run() {
LinearLayout display = (LinearLayout) findViewById(R.id.reviewHistory_display);
display.addView(temp);
}
});
}
この関数は 1 回正常に実行され、最初のテキストビューが表示されます。ただし、2 回目に呼び出されると、display.addView(temp); で失敗します。次のエラーのある行:
java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the childs's parent first.
テキストビューが新しくインスタンス化されたと思われる場合、なぜ私のテキストビューにすでに親があるのか わかりません。また、一時テキストビューを使用して、ランナブルがローカルのテキストビュー t を参照できないことを回避します。これは正しいです?どんな助けでも大歓迎です。