问题描述
我的代码:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// t-alk és impresszumhoz
LinearLayout layout = (LinearLayout) getActivity().findViewById(
R.layout.impresszum);
((TextView) layout.findViewById(R.id.impresszumtext1)).setText(" v.");...
这是一个片段的oncreateview方法,我在最后一行有一个空指针异常
This is a fragment's oncreateview method, and I have a nullpointerexception at the last line
03-04 13:48:20.149: E/AndroidRuntime(32586): at com.myapp.TestFragment.onCreateView(TestFragment.java:53)
这里是整个 onCreateView():
Here is the whole onCreateView():
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// feltételekhez és folyamatokhoz
WebView wv = new WebView(getActivity());
FrameLayout flayout = new FrameLayout(getActivity());
flayout.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,
LayoutParams.MATCH_PARENT));
flayout.setBackgroundResource(R.drawable.gradient_gray_light);
wv.setInitialScale(100);
wv.setScrollBarStyle(View.SCROLLBARS_OUTSIDE_OVERLAY);
wv.setBackgroundColor(getResources().getColor(R.color.transparent2));
wv.setPadding(5, 5, 5, 5);
wv.setWebViewClient(new WebViewClient() {
public void onReceivedError(WebView view, int errorCode,
String description, String failingUrl) {
Toast.makeText(getActivity(), description, Toast.LENGTH_SHORT)
.show();
Toast.makeText(getActivity(), "Hiba történt a betöltés során",
Toast.LENGTH_LONG).show();
}
@Override
public void onPageFinished(WebView view, final String url) {
progressDialog.cancel();
}
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
progressDialog = ProgressDialog.show(getActivity(), "",
"Loading...");
progressDialog.setCancelable(true);
progressDialog.setCanceledOnTouchOutside(false);
}
});
// feltételek
if (mContent.equalsIgnoreCase("Feltételek")) {
getActivity().getWindow().setFormat(PixelFormat.RGBA_8888);
wv.loadUrl("file:///android_asset/conditions.htm");
flayout.addView(wv);
return flayout;
}
// folyamatok
else if (mContent.equalsIgnoreCase("Folyamatok")) {
getActivity().getWindow().setFormat(PixelFormat.RGBA_8888);
wv.loadUrl("file:///android_asset/process.htm");
flayout.addView(wv);
return flayout;
}
// T-alkalmazások
else if (mContent.equalsIgnoreCase("T-alkalmazások")) {
}
// Impresszum
else if (mContent.equalsIgnoreCase("Impresszum")) {
final String TAG = "Impresszum";
String versionName;
String appName;
appName = getResources().getString(R.string.app_name);
LinearLayout layout = (LinearLayout) getActivity().findViewById(
R.layout.impresszum);
try {
versionName = getActivity().getPackageManager().getPackageInfo(
getActivity().getPackageName(), 0).versionName;
((TextView)layout.findViewById(R.id.impresszumtext1)).setText(appName
+ " v." + versionName);
} catch (NameNotFoundException ex) {
Log.e(TAG + ".1", "error: " + ex.getMessage(), ex);
}
return layout;
}
return layout;
}
我正在使用 ViewPagerIndicator.
And I am using ViewPagerIndicator.
推荐答案
首先我需要扩充布局,以便能够使用 findViewById() .
First I needed to inflate the layout, to be able to use findViewById() .
终于解决了:
这不是必需的:
LinearLayout layout = (LinearLayout) view
.findViewById(R.layout.impresszum);
相反,应该使用:
View view = inflater.inflate(R.layout.impresszum, container, false);
这一行的另一个修改:
((TextView) **view**.findViewById(R.id.impresszumtext1))
.setText(appName + " v." + versionName);
我也找到了一些解释:如果我的想法是正确的,首先我需要扩充布局以便能够使用findViewById"访问对象...这是偷偷摸摸的,因为 setcontentview() 为我们做了这个.
I have found some explanation, too:If I am thinking right, first I needed to inflate the layout to be able to access the objects using "findViewById"... It is sneaking, because setcontentview() does this for us.
这篇关于Fragment 的 onCreateView() 方法中的 NullPointerException的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!