2016-01-09 3 views
2

Я получаю эту ошибку: java.lang.IllegalStateException: указанный ребенок уже имеет родителя. Сначала вы должны вызвать removeView() родителя ребенка. Имя файлаКак я могу использовать несколько addview() для раздувания xml несколько раз в android

XML является panchang_cal_inflate

Вот мой код:

public class PanchangCal extends AppCompatActivity { 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_panchang_cal); 

    LinearLayout linearday=(LinearLayout)findViewById(R.id.sun2); 
    LinearLayout linearday1=(LinearLayout)findViewById(R.id.sun20); 

    LayoutInflater inflater =(LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    View myView = inflater.inflate(R.layout.activity_panchang_cal_inflate, null); 

    linearday1.addView(myView); 

    linearday.addView(myView); 

    } 

} 

ответ

0

Вы уверены, что хотите добавить myView в качестве подпункта целью linearday1 и linearday? Потому что это не сработает.

Если вы хотите этого, вы должны раздуть макет дважды:

LayoutInflater inflater =(LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
View myView1 = inflater.inflate(R.layout.activity_panchang_cal_inflate, null); 
View myView2 = inflater.inflate(R.layout.activity_panchang_cal_inflate, null); 

linearday1.addView(myView1); 
linearday.addView(myView2); 

Однако я верю, что вы на самом деле хотите добавить linearday1 и linearday, как подразделы вид myView - я неправильно?

myView.addView(linearday1); 
myView.addView(linearday); 

EDIT: Если вы хотите использовать код выше 30-кратного, вы можете использовать цикл как это:

View[] linearday = new View[30]; 
/** Save your linearday layouts in this array **/ 

LayoutInflater inflater =(LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
for (int i = 0; i < 30; i++) { 
    View myView inflater.inflate(R.layout.activity_panchang_cal_inflate, null); 
    linearday[i].addView(myView); 
} 

и для второго блока кода это очень похоже:

View[] linearday = new View[30]; 
/** Save your linearday layouts in this array **/ 

LayoutInflater inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
View myView inflater.inflate(R.layout.activity_panchang_cal_inflate, null); 
for (int i = 0; i < 30; i++) { 
    myView.addView(linearday[i]); 
} 

EDIT 2:
в соответствии с просьбой в комментарии s, вы хотите получить более подробную информацию о процессе заполнения массива, когда ваши представления хранятся в XML-файле:

Существует два способа сделать это. Если ваши макеты имеют совершенно случайные идентификаторы в то файл XML, то вы должны сделать это следующим образом:

View[] linearday = new View[30]; 
linearday[0] = findViewById(R.id.linearday_hello); 
linearday[1] = findViewById(R.id.linearday_window); 
linearday[2] = findViewById(R.id.linearday_test); 
// ... and so on 

Однако, если они имеют общую картину и лишь по мере увеличения индекса (например linearday0, linearday1, linearday2) , то вы можете сократить код, как это:

View[] linearday = new View[30]; 
    for (int i = 0; i < 30; i++) { 
    int resid = getResources().getIdentifier("linearday" + i, "id", getPackageName()); 
    linearday[i] = findViewById(resid); 
} 
+0

я пытаюсь добавить XML, который имеет относительное расположение в эти два макетах linearday1 и linearday – bipin

+0

благодаря это действительно сработало, что если я хочу использовать это для как 30 раз ? – bipin

+0

Что именно? Первый или второй кодовый блок? –

Смежные вопросы