2011-11-08 3 views
16

저는 Android 개발에 익숙하지 않고 수행하려는 작업을 수행하는 방법을 혼동합니다. 여러 가지 화면 크기 디자인간에 레이아웃과 코드를 공유 할 수 있도록 조각에 대한 독서와 학습을 해봤습니다. 나는 몇 조각을 만들어 성공적으로 사용했습니다. 그러나 나는 전화기에서 정상적인 활동에서 단편을 보여주고 싶지만 태블릿에 PopupWindow (또는 더 나은 선택이 있다면 비슷한 것)를 보여주고 싶습니다.PopupWindow에서 프래그먼트를 올바르게 생성합니다.

나는 버튼을 클릭 할 때 프래그먼트를 팽창시키고 PopupWindow에 표시하는 방법을 알아 냈습니다. 내 코드는 다음과 같습니다.

public void onClick(View v) { 
    LayoutInflater inflater = (LayoutInflater) BrowsingActivity.this.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    View popupLayout = inflater.inflate(R.layout.serverconnection_fragment, null, false); 
    connectionListPopup = new PopupWindow(popupLayout, 300, 470, true); 
    connectionListPopup.showAtLocation(BrowsingActivity.this.findViewById(R.id.connectionListImage), Gravity.CENTER, 0, 0); 
} 

팝업이 나타나고 serverconnection_fragment.xml에 설명 된 UI가 포함되어 있습니다. 문제는이 방법으로 작성하면 Fragment 클래스 ServerConnectionFragment.java가 인스턴스화되지 않으므로 목록의 항목이 내 UI에없고 버튼 리스너가 없다는 것입니다. 나에게 자바 클래스를 인스턴스화하는 방법이 있어야하며, 조각을 정상적으로 확장하고 이벤트 리스너를 첨부 한 다음, 거기에서 생성 된 뷰를 PopupWindow 생성자로 전달하지만 어떻게 처리 할 수 ​​있는지는 알 수 없습니다. 누구든지 나를 도울 수 있습니까?

FYI, Fragment 클래스의 Android-support-v4.jar 파일을 사용하여 Android 2.1 용으로 제작했습니다.

답변

17

레이아웃을 직접 팽창해도 조각을 인스턴스화하지 않습니다. Android는 단편과 활동이 동일한 레이아웃 파일을 참조하려고한다는 단순한 우연의 일치라고 생각할 것입니다.

일반적으로 FragmentManager.add(int,Fragment)을 사용하여 레이아웃에 조각을 추가 할 수 있습니다. 그러나 지정한 컨테이너 ID는 현재 Activity 레이아웃의 일부 여야하며 PopupWindow은 그렇지 않습니다. 대신, 컨테이너를 지정하지 않고 프래그먼트 관리자에 프래그먼트를 추가해야하고, 나중에 프래그먼트 (예 :)의 뒷부분에 PopupWindow를 표시 할 수 있습니다. 이것은 정확하게 DialogFragment이 작동하는 방식이며, 이미 많은 지원이 있으므로 DialogFragment를 대신 사용하는 것이 좋습니다.

조각 코드를 사용하면 단편 대신 DialogFragment를 확장하고 DialogFragment.show(FragmentManager,String)을 사용하여 표시 할 수 있습니다. onCreate 메서드에서 setStyle(DialogFragment.STYLE_NO_FRAME, getTheme())을 호출하여 기본 테두리를 제거 할 수 있습니다. 이 단편을 레이아웃에 추가 할 수 있습니다 (전화로는 팝업으로 표시하지 않으려 고합니다). 그러면 예상대로 작동합니다.

+0

확실히 정답입니다. 감사합니다. 또한 PopupWindow에서 목록을 표시 할 때 목록에 지정한 ContextMenu를 표시하는 것을 거부했습니다. DialogFragment로 전환하면 문제를 해결할 수있었습니다. –

+1

예를 들어 Popupwindow에 단편을 추가 할 수 있다면 마지막 문장을 설명하거나 예시 해 주시겠습니까? "이 단편을 레이아웃에 추가 할 수 있습니다 (원하지 않는 전화에서 말한 것처럼). 팝업으로 표시됨) 예상대로 작동합니다. " – JPMagalhaes

+1

@JPMagalhaes, Strong은 PopupWindow에서 조각을 사용하지 않는 것이 좋습니다. 메모리 누수 문제가 발생할 수 있기 때문입니다. – Jacky

관련 문제