Dynamically adding views into a specific fragment layout

36,793

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;
}
}
Share:
36,793
Drilon Berisha
Author by

Drilon Berisha

Updated on September 10, 2020

Comments

  • Drilon Berisha
    Drilon Berisha over 3 years

    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>