조각으로 컨텍스트를 얻는 방법은 무엇입니까?
나는 누구의 생성자 맥락에서 소요 내 데이터베이스를 사용할 필요가 있지만, 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()
얻을 context
에 Fragments
있지만 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();
/* ... */
}
}