2013-06-10 6 views
13

나는 Fragment을 넣은 FragmentActivity을 가지고 있습니다. 상황에 따라 해당 조각의 레이아웃에서 Buttons에 액세스하여 해당 수신기의 클릭 리스너를 변경하려고합니다.FragmentActivity에서 조각보기보기

View view = myFragment.getView(); 
Button myButton = (Button) view.findViewById(R.id.my_button); 
myButton.setOnClickListener(new MyClickListener()); 

그러나 view 변수는 항상 null입니다 :

내가 뭘 같습니다.

활동을 어떻게 볼 수 있습니까? 작품을

public class YourFragment extends Fragment { 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
      return inflater.inflate(R.layout.your_fragment, null); 
    } 

    @Override 
    public void onActivityCreated(Bundle savedInstanceState) { 
     super.onActivityCreated(savedInstanceState); 

     View view = getView(); 
     if(view != null) { 
      view.findViewById(R.id.my_button).setOnClickListener(new MyClickListener()); 
     } 
    } 
} 

이 코드해야합니다 이것을 시도

import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.Button; 

public class DetailFragment extends Fragment { 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.details, container, false); 
     return view; 
    } 


    public void setSettings(){ 
     Button button = (Button) getView().findViewById(R.id.my_button); 
     button.setOnClickListener(new MyClickListener()); 
    } 
} 
+1

myFragment가 추가되어 표시됩니까? –

+1

당신은'view'가 아니라 여러분의 액티비티의 뷰 계층 구조에서'findViewById()'를 호출하고 있다는 것을 주목하십시오. – laalto

+0

'Button myButton = (Button) findViewById (R.id.my_button);'를 실행하면,'fragment view'가 아닌 현재 뷰의 버튼을 찾으려고합니다. 따라서 예상대로 작동하지 않습니다. –

답변

21

, 나는 당신이이 같은 조각 내부의 방법을하는 것이 좋습니다 벌금. 나는 이것이 당신을 도울 것이라고 희망한다.

+0

의 onCreate()에서 getView()가 null을 반환 할 수 있으며 대부분의 경우 그렇게합니다. Activity의 OnCreate 메서드에서 setSettings를 호출하면 예외가 throw됩니다. –

12

: 당신이 당신의 구성 요소에 액세스하고 일부 데이터를 설정하려면

2

조각에서 OnClickListeners를 설정하려면 조각 클래스에서 onViewCreated을 재정의하십시오.

@Override 
public void onViewCreated(View view, Bundle savedInstanceState) { 
    super.onViewCreated(view, savedInstanceState); 
    view.findViewById(R.id.yourId).setOnClickListener(this); 
    //or 
    getActivity().findViewById(R.id.yourId).setOnClickListener(this); 
} 

조각에 webview를 자동으로 다시로드하도록 timertask를 설정하려고했는데이 방법이 저에게 효과적이었습니다. 내 프로젝트는 github입니다.

출처 : 당신이이 onViewCreated() 방법 안에 그것을하는 것이 좋습니다 Fragment를 확장하는 클래스 내부에 버튼을 초기화 this answer

1

. 이렇게하면 뷰가 이미 존재 함을 보증 할 수 있습니다.

1

단순히 getRootView() 메서드를 사용하여 작업에서 조각의 데이터를 가져옵니다.

//below block of code write in activity. 

EditText et = (EditText) v.getRootView().findViewById(R.id.name); 
Log.d("Name", et.getText().toString()); 

name은 조각 필드입니다.

관련 문제