[java] 프래그먼트에서 컨텍스트 사용

조각으로 컨텍스트를 얻는 방법은 무엇입니까?

나는 누구의 생성자 맥락에서 소요 내 데이터베이스를 사용할 필요가 있지만, getApplicationContext()그리고 FragmentClass.this내가 무엇을 할 수 있는지 작동하지 않습니다?

데이터베이스 생성자

public Database(Context ctx)
{
    this.context = ctx;
    DBHelper = new DatabaseHelper(context);
}



답변

을 사용 getActivity()하면 a와 관련된 활동이 반환 fragment됩니다.
활동은 context ( Activity확장 이후 Context) 입니다.


답변

위의 답변으로 수행하기 위해 onAttach조각화 방법을 재정의 할 수 있습니다 .

public static class DummySectionFragment extends Fragment{
...
    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
        DBHelper = new DatabaseHelper(activity);
    }
}


답변

항상 getActivity () 메소드를 사용 하여 첨부 된 활동의 컨텍스트를 가져 오십시오. 그러나 한 가지만 기억하십시오. 프래그먼트는 약간 불안정하고 getActivity일부 경우 널을 리턴하므로 컨텍스트를 가져 오기 전에 항상 iPart () 메소드를 확인하십시오 getActivity().


답변

내가 찾은 조각의 컨텍스트를 얻는 가장 쉽고 정확한 방법은 적어도 여기에서 메소드 ViewGroup를 호출 할 때 직접 가져 오는 것 onCreateView입니다 getActivity().

public class Animal extends Fragment {
  Context thiscontext;
  @Override
  public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
  {
    thiscontext = container.getContext();


답변

이전에 내가 사용하고 onAttach (Activity activity)얻을 수 context있는Fragment

문제

onAttach (Activity activity)메소드는 API 레벨 23에서 더 이상 사용되지 않습니다.

해결책

지금 상황을 얻기 위해 Fragment우리가 사용할 수 있습니다onAttach (Context context)

onAttach (Context context)

  • 프래그먼트가 처음에 첨부 될 때 호출됩니다 context. onCreate(Bundle)이 후에 호출됩니다.

선적 서류 비치

/**
 * Called when a fragment is first attached to its context.
 * {@link #onCreate(Bundle)} will be called after this.
 */
@CallSuper
public void onAttach(Context context) {
    mCalled = true;
    final Activity hostActivity = mHost == null ? null : mHost.getActivity();
    if (hostActivity != null) {
        mCalled = false;
        onAttach(hostActivity);
    }
}

샘플 코드

public class FirstFragment extends Fragment {


    private Context mContext;
    public FirstFragment() {
        // Required empty public constructor
    }

    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
        mContext=context;
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View rooView=inflater.inflate(R.layout.fragment_first, container, false);

        Toast.makeText(mContext, "THIS IS SAMPLE TOAST", Toast.LENGTH_SHORT).show();
        // Inflate the layout for this fragment
        return rooView;
    }

}

노트

우리는 또한 사용할 수 있습니다 getActivity()얻을 contextFragments
있지만 getActivity()반환 할 수 있습니다 null당신의이 경우 fragment현재 부모에 연결되어 있지 않습니다 activity,


답변

@Override
public void onAttach(Activity activity) {
    // TODO Auto-generated method stub
    super.onAttach(activity);
    context=activity;
}


답변

inflater재정의 할 때 매개 변수 에서 컨텍스트를 가져올 수도 있습니다 onCreateView.

public static class MyFragment extends Fragment {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                 Bundle savedInstanceState) {
        /* ... */
        Context context = inflater.getContext();
        /* ... */
    }
}