0

I'm new to Android, and I'm including a fragment in an Activity programmatically.

Here's my Fragment class Code :

import com.pt.app.R;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

public class MediaDisplayFragment extends Fragment {

    @Override
    public View onCreateView (LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        return inflater.inflate (R.layout.media_display_fragment, container, false);
    }
}

and my Activity's code :

public class ReadMediasView extends FragmentActivity {

    @Override
    protected void onCreate (Bundle savedInstanceState) {
        super.onCreate (savedInstanceState);

        setContentView (R.layout.read_medias_view);

        Fragment            fragment            = new MediaDisplayFragment ();
        FragmentManager     fragmentManager     = getSupportFragmentManager();
        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
        fragmentTransaction.replace (R.id.readMediaViewContainerContent, fragment);

        // Null Pointer Exception Here
        TextView text = (TextView)fragment.getView ().findViewById (R.id.mediaDisplayText);
        text.setVisibility (View.VISIBLE);             
    }
}

EDIT : And this is my My Logcat output :

FATAL EXCEPTION: main
Process: com.pt.app, PID: 28492
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.pt.app/com.pt.app.ReadMediasView}: java.lang.NullPointerException
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2195)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)
at android.app.ActivityThread.access$800(ActivityThread.java:135)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5017)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException
at com.pt.app.ReadMediasView.onCreate(ReadMediasView.java:91)
at android.app.Activity.performCreate(Activity.java:5231)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2159)
... 11 more

Why do I get this NullPointerException ? Thank you.

1 Answers1

0

Try this..

public class MediaDisplayFragment extends Fragment {

    @Override
    public View onCreateView (LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
           View view = inflater.inflate (R.layout.media_display_fragment, container, false);
           TextView text = (TextView) view.findViewById (R.id.mediaDisplayText);
           text.setVisibility (View.VISIBLE);   
        return view;
    }
}
Hariharan
  • 24,741
  • 6
  • 50
  • 54
  • Thank you for your answer, I don't want to process the content of the fragment from the fragment itself. What I want is doing that from the activity since I have many conditions etc... –  Apr 20 '14 at 15:42
  • @Andro-Begg You cannot do that. You have to do that in MediaDisplayFragment only. – Hariharan Apr 20 '14 at 15:44
  • @Harihran : So what you're saying is that I can't process my fragment's layout components from the Activity ? –  Apr 20 '14 at 15:53
  • @Andro-Begg Yes you cannot access it. – Hariharan Apr 20 '14 at 15:54
  • No you cannot. You cannot and should not have access to layout components of the `Fragment` in the `Activity`. – Xaver Kapeller Apr 20 '14 at 15:54
  • Thank you. In that case, what will be the purpose of `getView()` ? –  Apr 20 '14 at 15:56
  • @Andro-Begg The parent is provided so you can inflate your view into that for proper layout parameters like `inflater.inflate (R.layout.media_display_fragment, container, false);` proper layout parameters that time getView() used . – Hariharan Apr 20 '14 at 16:01