I am trying to add a TextView dynamically into a layout which is part of a Fragment, but it is not working. As soon as the application starts it shuts down immediately.
I think it has to do something with the
TextView Paper = new TextView(this);
part. I dont know how to get the right Context since I'm working with Fragments. Maybe my assumption is wrong but I really dont know where the error might be.
public class PageFragment extends Fragment {
private int fragmentNR;
public PageFragment(int nr) {
this.fragmentNR = nr;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = new View(getActivity());
if (fragmentNR == 0)
v = inflater.inflate(R.layout.page1, container, false);
else if (fragmentNR == 1)
v = inflater.inflate(R.layout.page2, container, false);
else if (fragmentNR == 2)
v = inflater.inflate(R.layout.page3, container, false);
return v;
}
}
public class MainActivity extends FragmentActivity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); PageAdapter mPageAdapter = new PageAdapter(getSupportFragmentManager()); ViewPager mViewPager = (ViewPager) findViewById(R.id.viewpager); mViewPager.setAdapter(mPageAdapter); //This is where i try to add my TextView into my Layout LinearLayout PaperLayout = (LinearLayout) findViewById(R.id.PaperLayout);//PaperLayout is a LinearLayout within the Page2-Fragment(R.layout.page2) TextView Paper = new TextView(this); Paper.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); Paper.setText("Paper2"); PaperLayout.addView(Paper); } }
logcat
07-18 16:32:58.330: E/AndroidRuntime(614): FATAL EXCEPTION: main
07-18 16:32:58.330: E/AndroidRuntime(614): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.loni.math_prime/com.loni.math_prime.MainActivity}: java.lang.NullPointerException
07-18 16:32:58.330: E/AndroidRuntime(614): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2059)
07-18 16:32:58.330: E/AndroidRuntime(614): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)
07-18 16:32:58.330: E/AndroidRuntime(614): at android.app.ActivityThread.access$600(ActivityThread.java:130)
07-18 16:32:58.330: E/AndroidRuntime(614): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)
07-18 16:32:58.330: E/AndroidRuntime(614): at android.os.Handler.dispatchMessage(Handler.java:99)
07-18 16:32:58.330: E/AndroidRuntime(614): at android.os.Looper.loop(Looper.java:137)
07-18 16:32:58.330: E/AndroidRuntime(614): at android.app.ActivityThread.main(ActivityThread.java:4745)
07-18 16:32:58.330: E/AndroidRuntime(614): at java.lang.reflect.Method.invokeNative(Native Method)
07-18 16:32:58.330: E/AndroidRuntime(614): at java.lang.reflect.Method.invoke(Method.java:511)
07-18 16:32:58.330: E/AndroidRuntime(614): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
07-18 16:32:58.330: E/AndroidRuntime(614): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
07-18 16:32:58.330: E/AndroidRuntime(614): at dalvik.system.NativeStart.main(Native Method)
07-18 16:32:58.330: E/AndroidRuntime(614): Caused by: java.lang.NullPointerException
07-18 16:32:58.330: E/AndroidRuntime(614): at com.loni.math_prime.MainActivity.onCreate(MainActivity.java:30)
07-18 16:32:58.330: E/AndroidRuntime(614): at android.app.Activity.performCreate(Activity.java:5008)
07-18 16:32:58.330: E/AndroidRuntime(614): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079)
07-18 16:32:58.330: E/AndroidRuntime(614): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023)
07-18 16:32:58.330: E/AndroidRuntime(614): ... 11 more
XML
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
>
<android.support.v4.view.ViewPager
android:id="@+id/viewpager"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<android.support.v4.view.PagerTitleStrip
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textSize="32dp"
android:textStyle="bold"
android:textColor="#fff5ee"
android:layout_gravity="top" />
</android.support.v4.view.ViewPager>
</LinearLayout>
To declaratively add a fragment to your activity layout's XML, use a FragmentContainerView element. The android:name attribute specifies the class name of the Fragment to instantiate.
The FragmentManager class allows you to add, remove and replace fragments in the layout of your activity. It can accessed in an activity via the getFragmentManager() method. The modifications must be performed in a transaction via the FragmentTransaction class.
Fragments are used when the user wants to see two different views of two different classes on the same screen. Fragments were added with Android Honeycomb. So if you are developing an application only for Android 3.0 (HoneyComb) or higher then Android provides you access to the Fragments class.
Solved:
public class PageFragment extends Fragment {
private int fragmentNR;
public PageFragment(int nr) {
this.fragmentNR = nr;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = new View(getActivity());
if (fragmentNR == 0)
v = inflater.inflate(R.layout.page1, container, false);
else if (fragmentNR == 1){
v = inflater.inflate(R.layout.page2, container, false);
View tv = v.findViewById(R.id.Ausgabe);
((TextView)tv).setText("TestText");
View pl = v.findViewById(R.id.PageLayout);
TextView Paper = new TextView(pl.getContext());
Paper.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
Paper.setText("Inserted TestText");
((LinearLayout)pl).addView(Paper);
}
else if (fragmentNR == 2)
v = inflater.inflate(R.layout.page3, container, false);
return v;
}
}
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