NullPointerException in der onCreateView () -Methode von Fragment
Mein Code:
@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.");...
Dies ist die oncreateview-Methode eines Fragments, und in der letzten Zeile wird eine Nullpunkt-Ausnahme angezeigt
03-04 13:48:20.149: E/AndroidRuntime(32586): at com.myapp.TestFragment.onCreateView(TestFragment.java:53)
Hier ist das ganze 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;
}
Und ich benutze ViewPagerIndicator.
Tut mir leid wenn das noob ist, meine Augen fließen heraus ... Danke für Ihre Hilfe!
Endlich die Lösung:
Dies wird nicht benötigt:
LinearLayout layout = (LinearLayout) view
.findViewById(R.layout.impresszum);
Stattdessen sollte dies verwendet werden:
View view = inflater.inflate(R.layout.impresszum, container, false);
Und noch eine Modifikation in dieser Zeile:
((TextView) **view**.findViewById(R.id.impresszumtext1))
.setText(appName + " v." + versionName);
Ich habe auch eine Erklärung gefunden: Wenn ich richtig denke,Zuerst musste ich das Layout aufblasen, um mit "findViewById" auf die Objekte zugreifen zu können.... Es schleicht sich, weil setcontentview () dies für uns erledigt.