2015-06-27 1 views
3

Мне действительно интересно. У меня есть контекст:Разница между использованием контекста и активностью в фрагменте?

Context context= getActivity(); 

, когда я использую context в фрагменте для пользовательских интерфейса таких вещей, как WebView приложение дает мне NullPointerException (Forceclose), но когда я использую getActivity(), который хорошо работает. какая разница !? Позвольте мне объяснить использование. У меня есть действия под названием «A» и «B». активность «B» наследует NavigationDrawer и Actionbar от действия «B». SO есть:

public class B extends A 

Мы знаем, что в NavigationDrawer есть основное содержание. активность «B» использует фрагмент для основного содержимого, и я использую контекст в этом фрагменте. Мне действительно интересно снова! Извините за плохой английский.

Edit: Вот мой код:

public class PlaceholderFragment extends Fragment { 

public Context context = getActivity(); 
private static final String ARG_SECTION_NUMBER = "section_number"; 

public PlaceholderFragment() { 
} 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     View rootView = inflater.inflate(R.layout.fragment_text, container, false); 
     String text = "<html><head><link href=\"file:///android_asset/style_css.css\" rel=\"stylesheet\" type=\"text/css\"></head> <body class=\"body\"> title1 <hr> <div align=\"center\"> <img src= "+imagePath1_1+" width= \"95% \" /></div>les1</body></html>"; 

     WebView webView= new WebView(context); 
     webView.loadDataWithBaseURL(null,text, "text/html", "UTF-8", null); 
     return rootView; 
    } 
    @Override 
    public void onAttach(Activity activity) { 
     super.onAttach(activity); 
     ((enhanced) activity).onSectionAttached(
       getArguments().getInt(ARG_SECTION_NUMBER)); 
    } 
} 

, если я использую getActivity(); непосредственно этот код работает. Что я пытался: изменил context на общедоступный и последний, и использовал простой TextView вместо WebView.

+0

может разместить свой код .. –

+0

Возможно, это решение работает: http://stackoverflow.com/questions/12320857/how-to-get-my-activity-context – mayo

ответ

5

Позвольте мне угадать ... у вас есть NullPointerException? Потому что кажется, что ваше значение context всегда нуль, так как вы заявляете это так:

public Context context = getActivity(); 

Причина в том, эта строка кода запуска при создании фрагмента, и это время он не присоединяется к какой-либо деятельности еще так getActivity() всегда возвращает null. Если вы хотите, чтобы ваш код работал. Поместите context = getActivity() где-нибудь еще в жизненном цикле Фрагмента.

+0

Yup, из руководства для разработчиков Android: «Внимание: Если вам нужен объект Context внутри вашего фрагмента, вы можете вызвать getActivity(). Однако будьте осторожны, чтобы вызвать getActivity() только тогда, когда фрагмент привязан к действию. Когда фрагмент еще не прикреплен или был отсоединен в конце его жизненного цикла, getActivity() вернет null. " – adao7000