2015-01-21 3 views
1

이 질문을하기 전에 다른 게시물을 여러 번 보았습니다. 누구도 확실한 해결책을 찾지 못했습니다.내 ViewStub이 부풀어 오름/보이고 null/null이 아닌지 확인하십시오.

ViewStub에 문제가 발생하여 ViewStub가 비정상적으로 작동하는지 (보이지 않거나 보이지 않는지) 확인하고 싶습니다. 나는 그것에 기초하여 할 일들이 많다.

각 ViewStub 레이아웃에서 두 개의 ViewStub 및 버튼을 사용하고 있습니다. 즉, layout/abc 및 layout/def에서 다른 ViewStub를 부 풀릴 것입니다.

<ViewStub 
android:id="@+id/abc_stub" 
android:layout_width="wrap_content" 
android:layout_height="match_parent" 
android:layout="@layout/abc" /> 

<ViewStub 
android:id="@+id/def_stub" 
android:layout_width="wrap_content" 
android:layout_height="match_parent" 
android:layout="@layout/def" /> 

내가 부딪히는 문제는 null이 아니길 기대하는 동안 ViewStub이 null이 아니란 점입니다.

누락 된 항목이 있습니까? 부울 사실 stub1가있는 화면입니다 경우

+0

OnInflateListener, 그것은 당신이 원하는 무엇을하지? – pskink

+0

실제로, 나는 팽창 된 Viewstub 중 하나 또는 둘 다 부풀려진 곳을 기반으로 한 펑션 (funtionality)을 작성해야합니다. – kapalani

+0

리스너가 그 일을 할 수없는 이유는 무엇인지 알지 못합니다 ... – pskink

답변

1

그래서 내가하고 결국 무엇을 (ViewStub.OnInflateListener inflateListener)

ViewStub stub1 = ((ViewStub)findViewById(KR.get(R.abc_stub))); 
stub1.setOnInflateListener(new ViewStub.OnInflateListener{ 
    @Override 
    public void onInflate(ViewStub paramViewStub, View paramView) { 
     // Set a class boolean if it was inflated        
    } 
}); 

setOnInflateListener이었다. 그렇지 않다.

도움을 주신 @pskink에게 감사드립니다.

5

리스너에 의존하지 않는 대체 솔루션을 제시하고자합니다.

View stub = findViewById(R.id.my_view_stub); 
if(stub instanceof ViewStub) { 
    // it have not been inflated 
} else { 
    // if have been inflated 
} 

그 뒤에 논리는 인플레이션 후 ViewStub 뷰 계층 구조에서 제거됩니다 및 팽창 된 레이아웃을 무엇으로 대체한다는 것이다. stubinstanceOf FrameLayout/LinearLayout/Button 또는 어떤 다른 뷰가 팽창 레이아웃에 있던 실제 ViewStub 인스턴스가 사라지고 당신이에 대한 참조를 유지하지 않는 경우, 그것은도하고 쓰레기 수집 할 수 있다는 것을 의미

.

1

더 우아한 해결책 :

if (mViewStub.getParent() != null) { 
    //have not been inflated 
    mViewStub.inflate(); 
} else { 
    //already inflated 
}