Dav*_*vid 3 android android-context android-fragments
我真的很纳闷.我有一个上下文:
Context context= getActivity();
Run Code Online (Sandbox Code Playgroud)
当我context在片段中使用UI时,像webview app这样的东西给了我NullPointerException(Forceclose),但是当我使用getActivity()它时效果很好.有什么区别!?让我解释一下用法.我有一个名为"A"和"B"的活动.活动"B"从活动"B"继承NavigationDrawer和Actionbar.所以有:
public class B extends A
Run Code Online (Sandbox Code Playgroud)
我们在NavigationDrawer中知道有一个主要内容.活动"B"使用片段来提供主要内容,我在该片段中使用Context.我真的很想知道!抱歉英语不好.
编辑:这是我的代码:
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));
}
}
Run Code Online (Sandbox Code Playgroud)
如果我使用getActivity(); 直接这个代码工作.我尝试过:改为contextpublic和final,使用简单TextView而不是WebView.
小智 5
我猜......你有NullPointerException吗?因为您的context值似乎总是为null,因为您声明它是这样的:
public Context context = getActivity();
Run Code Online (Sandbox Code Playgroud)
原因是这段代码在创建Fragment时运行,并且它没有附加到任何Activity的时间,因此getActivity()始终返回null.如果你想让你的代码工作.请放在
context = getActivity()Fragment生命周期的其他地方.