My 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.");...
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)
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;
}
And I am using ViewPagerIndicator.
Here are the internals of the Fragment life cycle:
FragmentManager sets the activity value for a Fragment performing a state transition:
f.mActivity = mActivity;
f.mFragmentManager = mActivity.mFragments;
f.mCalled = false;
f.onAttach(mActivity);
Also, it sets this value to null, after detaching the Fragment:
f.mCalled = false;
f.onDetach();
. . .
f.mActivity = null;
f.mFragmentManager = null;
So, The value should not be null, between onAttach() and onDetach(), if every thing else is fine.
To be safe, move all such code to onActivityCreated();
First I needed to inflate the layout, to be able to use findViewById() .
Finally the solution:
This is not needed:
LinearLayout layout = (LinearLayout) view
.findViewById(R.layout.impresszum);
Instead this should be used:
View view = inflater.inflate(R.layout.impresszum, container, false);
And another modification in this line:
((TextView) **view**.findViewById(R.id.impresszumtext1))
.setText(appName + " v." + versionName);
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With