IT

런타임에 뷰를 다른 뷰로 대체하는 Android 레이아웃

lottoking 2020. 5. 29. 08:10
반응형

런타임에 뷰를 다른 뷰로 대체하는 Android 레이아웃


나는이 xml두 textviews A / B와보기 C. 내가이 개 다른이와 주요 -layout 파일 xml-layout 파일 option1option2. Java를 통해 option1또는 option2런타임으로 C로 C 를로드 할 수 있습니까? 그렇다면 어떤 기능을 사용해야합니까?


언제든지 모든보기를 바꿀 수 있습니다.

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);

기존의 View 를 바꾸고 싶지 않지만 초기화 할 때 option1 / option2 중에서 선택하면 android:id부모 레이아웃으로 설정 한 다음 다음을 쉽게 수행 할 수 있습니다 .

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

뷰 구조에 따라 "인덱스"를 적절한 값으로 설정해야합니다. ViewStub 을 사용할 수도 있습니다 : C보기를 ViewStub으로 추가 한 다음 :

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

이렇게하면 XML 레이아웃을 재구성하려는 경우 "인덱스"값 이상을 걱정할 필요가 없습니다.


그리고 자주 그렇게하면 ViewSwitcher 또는 ViewFlipper사용하여 뷰 대체를 쉽게 할 수 있습니다.


내 경우에는 oldSensor와 newSnsor-oldView와 newView에서 작동합니다.

private void replaceSensors(View oldSensor, View newSensor) {
            ViewGroup parent = (ViewGroup) oldSensor.getParent();

            if (parent == null) {
                return;
            }

            int indexOldSensor = parent.indexOfChild(oldSensor);
            int indexNewSensor = parent.indexOfChild(newSensor);
            parent.removeView(oldSensor);
            parent.addView(oldSensor, indexNewSensor);
            parent.removeView(newSensor);
            parent.addView(newSensor, indexOldSensor);
        }

private void replaceView(View oldV,View newV){
        ViewGroup par = (ViewGroup)oldV.getParent();
        if(par == null){return;}
        int i1 = par.indexOfChild(oldV);
        par.removeViewAt(i1);
        par.addView(newV,i1);
    }

참고 URL : https://stackoverflow.com/questions/3334048/android-layout-replacing-a-view-with-another-view-on-run-time

반응형