Использовать представление для раздувания несколько раз

У меня есть проблема с раздуванием и повторным использованием одного и того же TextView.
Это похоже на попытку переписать один и тот же текст снова и снова или что-то еще, и это не может сделать это?

LayoutInflater inflater = LayoutInflater.from(this); View mainlayout = inflater.inflate(R.layout.days_monday_inflate, null); View layout_number = inflater.inflate(R.layout.inflate_number, null); for (int i = 0; i < 10; i++) { row = new TableRow(this); number = (TextView) layout_number.findViewById(R.id.Number); number.setTag(i); number.setText(Integer.toString(i)); row.addView(number); } setContentView(mainlayout); 

Вот файл inflate_number.xml

 <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/Number" android:layout_width="3dp" android:layout_height="wrap_content" android:layout_gravity="center|bottom" android:text="1" /> 

Это ошибка im row.addView(number); и его строка: 51, которая: row.addView(number);

  07-18 20: 54: 25.124: E / AndroidRuntime (1166): вызвано: java.lang.IllegalStateException: указанный ребенок уже имеет родителя.  Сначала вы должны вызвать removeView () родителя ребенка.
 07-18 20: 54: 25.124: E / AndroidRuntime (1166): at android.view.ViewGroup.addViewInner (ViewGroup.java:1970)
 07-18 20: 54: 25.124: E / AndroidRuntime (1166): at android.view.ViewGroup.addView (ViewGroup.java:1865)
 07-18 20: 54: 25.124: E / AndroidRuntime (1166): at android.view.ViewGroup.addView (ViewGroup.java:1822)
 07-18 20: 54: 25.124: E / AndroidRuntime (1166): at android.view.ViewGroup.addView (ViewGroup.java:1802)
 07-18 20: 54: 25.124: E / AndroidRuntime (1166): at com.trainingschedule.days.Monday.onCreate (Monday.java:50)
 07-18 20: 54: 25.124: E / AndroidRuntime (1166): at android.app.Instrumentation.callActivityOnCreate (Instrumentation.java:1047)
 07-18 20: 54: 25.124: E / AndroidRuntime (1166): at android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2627)

    Вы никогда не добавляете никаких видов в свою деятельность. Вы создаете новые TableRows и добавляете к ним TextViews, но никогда не добавляете строки ни к чему. Предполагая, что у вас есть TableLayout в R.layout.days_monday_inflate , вы должны сначала получить ссылку на это представление ( TableLayout layout = (TableLayout)mainLayout.findViewById(R.id.my_table_layout_id) ), а затем добавить каждую строку в таблицу TableLayout:

     TableLayout layout = (TableLayout)mainLayout.findViewById(R.id.my_table_layout_id); for(int i = 0; i < 10; i++) { row = new TableRow(this); View layout_number = inflater.inflate(R.layout.inflate_number, layout, false); TextView number = (TextView) layout_number.findViewById(R.id.Number); number.setTag(i); number.setText(Integer.toString(i)); row.addView(number); layout.addView(row); } 

    Хотя я бы рекомендовал полностью настроить ваш макет в XML, если это вообще возможно, если только это не требуется динамически. Кроме того, если вы добавляете только один TextView для каждой строки, вам лучше использовать LinearLayout, я бы предложил.

    В моем случае setTag (i) не работал, то, что работало, меняло идентификатор после раздувания макета, но перед добавлением его в родительское представление следующим образом:

     LayoutInflater inflater = LayoutInflater.from(this); View mainlayout = inflater.inflate(R.layout.days_monday_inflate, null); View layout_number = inflater.inflate(R.layout.inflate_number, null); for (int i = 0; i < 10; i++) { row = new TableRow(this); number = (TextView) layout_number.findViewById(R.id.Number); number.setId(i); //THIS IS THE KEY STEP number.setText(Integer.toString(i)); row.addView(number); } setContentView(mainlayout); 

    Вы пытаетесь добавить один TextView в несколько строк, что является причиной вашей ошибки. Чтобы получить новый TextView, вам нужно каждый раз перетаскивать layout_number.

    Я не уверен, что содержится в вашем файле layout_number, но основываясь на том, что у вас здесь, похоже, вам лучше было бы лучше создавать новые TextView внутри вашего цикла ala

     for (int i = 0; i < 10; i++) { row = new TableRow(this); number = new TextView(this); number.setTag(i); number.setText(Integer.toString(i)); row.addView(number); } 

    Попробуй это:

     View mainlayout = inflater.inflate(R.layout.days_monday_inflate, null); for (int i = 0; i < 10; i++) { row = new TableRow(this); View layout_number = inflater.inflate(R.layout.inflate_number, null); TextView number = (TextView) layout_number.findViewById(R.id.Number); number.setTag(i); number.setText(Integer.toString(i)); row.addView(number); }