2011-12-20 2 views
8

단편에 대한 기사를 많이 읽었지만, 어떻게 해야할지 혼란 스럽습니다.프래그먼트 요소의 단편화 onClick 메소드

두 개의 프래그먼트를 나란히 표시하는 MainActivity가 있습니다.

android:onClick="buttonClicked" 

지금 내가이 구현 될 필요가 있다고 가정했을 그 방법

public void buttonClicked(View view) 

을 구현하려는 조각 중 하나에서 나는 버튼이 있고 버튼의 조각 레이아웃 XML로 정의 MainActivity.java가 아니라 FragmentA.java에서. 그러나 MainActivity.java에서 해당 메소드가 구현 된 경우에만 작동합니다. 왜 그런가요? 내게는 말이 안된다. Pre Honeycomb 그 액티비티에 속한 하나의 액티비티에 속하는 메소드를 태블릿으로 사용하여 하나의 MainActivity에 많은 액티비티를 병합하고 모든 다른 메소드가 병합됩니까? 그러면 FragmentA.java에 어떤 것을 넣을 까? 이 앱이 핸드 헬드에서 실행되기 때문에 자신 만의 액티비티를 시작해야한다면, onClick 메서드가 MainActivity에 있지 않아도 호출되어야하는 액티비티에 있어야합니다. 나는 그 순간에 꽤 혼란 스럽다.

+0

주요 액티비티 컨텍스트를 사용하여 조각 레이아웃 XML이 비정상적으로 증가했기 때문일 수 있습니다. 다른 사람들이 대답 할 수있는 것을 볼 수 있습니다. – blessenm

+0

"MainActivity.java'"로 메소드가 구현 된 경우에만 작동한다는 것을 의미합니까? 오류가 발생합니까 아니면 코드가 예상 한 결과를 제공하지 못합니까? –

+3

http://stackoverflow.com/questions/7570575/onclick-inside-fragment-called-on-activity 동일한 질문에 대한 답변입니다. – kzotin

답변

4

나는이 특정한 문제가 무엇인지 모르지만, 아마도 이것이 도움이 될 것이다. 안드로이드 문서에서

Fragment에의 :

당신은 모듈 형 및 재사용 가능한 활동 구성 요소로 각 조각을 설계해야합니다. 즉, 각 프래그먼트는 고유 한 라이프 사이클 콜백을 사용하여 자체 레이아웃과 고유 한 동작을 정의하므로 하나의 프래그먼트를 여러 액티비티에 포함 할 수 있으므로 재사용을 위해 디자인하고 다른 프래그먼트에서 하나의 프래그먼트를 직접 조작하지 않아야합니다.

즉 다른 조각에서 조각을 조작해서는 안됩니다. 오히려 이것은 기본 활동을 통해 수행되어야합니다. 자세한 내용은 article의 "활동에 대한 이벤트 콜백 만들기"섹션을 읽어보십시오 (중요한 내용 !!).

한편

, 당신은 버튼을 Fragment 자체 내에서 작업을 수행하려는 경우 (즉, 당신이 조각 내에서 TextView의 텍스트를 변경하는 Button 클릭을 원하는 경우), 당신은 Fragment이를 구현해야합니다, Activity이 아닙니다 (이는 결과 동작이 Fragment에 포함되어 있고 부모 Activity과 아무 관련이 없기 때문입니다).

의견을 남기고 내 게시물이 혼란 스럽다면 분명히 할 수 있습니다 ... 나는 최근에 Fragment 님의 자신을 이해하기 시작했습니다. :)

+4

AndyAndroid의 관심사가 잘 정립되어 있는지 확인할 수 있습니다. 그리고 TabHost & 여러 FragmentActivity의 동일한 문제가 있습니다. 기본적으로 레이아웃에서 호출되는 onClick 메서드는 해당 메서드가 단편이 아닌 TabHost 클래스에 정의 될 것으로 기대합니다. 그러므로 큰 문제. –

+0

어쩌면 내가 올바르게 읽지 못했을 수도 있습니다, 이것은 답변으로 표시되어 있습니다. 그러나 어떻게 프로그램 적으로 리스너를 만들지 않고도 조각 내에서'onClick' 리스너를 만들 수 있습니까? – katit

0

글쎄,

나는 그것이 안드로이드 컨텍스트 구조의 계층 구조와 관련이 있다고 생각한다. 활동은 모든 하위보기의 호스트이므로 조각이 실제로 호스트의 컨텍스트를 사용한다고 말할 수 있습니다. 따라서 조각 시스템의 onClick을 사용하면 조각의 호스트 활동에서 항상 검색됩니다.

확인해보십시오. Android developer onClick attribute description

나는 한 가지를 검사하지 않았지만 테스트를 할 수 있습니다. 프래그먼트보다는 호스트 활동에서 구현을 제공하지만 fragment의 레이아웃 파일에서 onClick을 사용합니다. 상위 메소드를 호출해야합니다.

관련 문제