views:

106

answers:

1

I have a xml-layout file main with two textviews A/B and a view C. Than I have two other xml layout files option1 and option2. Is it possible to load either option1 or option2 in run time via Java into C? If so, what function do I have to use?

+4  A: 

You could replace any view at any time.

    int optionId = someExpression ? R.layout.option1 : R.layout.option2;

    View C = findViewById(R.id.C);
    ViewGroup parent = (ViewGroup) C.getParent();
    int index = parent.indexOfChild(C);
    parent.removeView(C);
    C = getLayoutInflater().inflate(optionId, parent, false);
    parent.addView(C, index);

If you don't want to replace already existing View, but choose between option1/option2 at initialization time, then you could do this easier: set android:id for parent layout and then:

    ViewGroup parent = (ViewGroup) findViewById(R.id.parent);
    View C = getLayoutInflater().inflate(optionId, parent, false);
    parent.addView(C, index);

You will have to set "index" to proper value depending on views structure. You could also use a ViewStub: add your C view as ViewStub and then:

    ViewStub C = (ViewStub) findViewById(R.id.C);
    C.setLayoutResource(optionId);
    C.inflate();

That way you won't have to worry about above "index" value if you will want to restructure your XML layout.

Brutall