Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Dynamically adding views into a specific fragment layout

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>
like image 732
Drilon Berisha Avatar asked Jul 18 '12 15:07

Drilon Berisha


People also ask

What object is used to add a fragment to a layout?

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.

Is used to perform add/remove or replace fragment dynamically in your activity?

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.

What are dynamic fragments?

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.


1 Answers

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;
}
}
like image 154
Drilon Berisha Avatar answered Sep 21 '22 05:09

Drilon Berisha