0

I have created One ListFragment and ononItemClick of each Item I trying to open the Value of the List into other Fragment .

I have Sucessfully created that by having two fragmentsand Communicated them through interface via activity as Described in google docs.

But When I m trying to create a new Fragment on each Item Click of List and communicating through interface I getting a Null Pointer Exception on that View

public class Details extends Fragment {

    ViewGroup view_details;

    static int count;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {

        view_details = (ViewGroup) inflater.inflate( R.layout.details, container , false);

        return view_details;

    }

    public void setTextView(String details_string){

        Log.d("TAG", ""+details_string.toString());

        TextView txt_view_details = (TextView) view_details.findViewById(R.id.txt_details);

           //Getting Null POinter Here

        txt_view_details.setText(details_string.toString());

    }
}

My interface Method where I m inserting new Fragment into FrameLayout is:

@Override
    public void connectIt(String time) {

        Details details = new Details();

        FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();

        fragmentTransaction.replace( R.id.frameLayout , details );

        fragmentTransaction.addToBackStack(null);

        if (details != null ) {

            details.setTextView(time);

        }

        fragmentTransaction.commit();

    }


12-17 18:18:06.740: E/AndroidRuntime(15917): FATAL EXCEPTION: main
12-17 18:18:06.740: E/AndroidRuntime(15917): java.lang.NullPointerException
12-17 18:18:06.740: E/AndroidRuntime(15917):    at com.raweng.fragmentdemo.Details.setTextView(Details.java:31)
12-17 18:18:06.740: E/AndroidRuntime(15917):    at com.raweng.fragmentdemo.FragmentDemo.connectIt(FragmentDemo.java:46)
12-17 18:18:06.740: E/AndroidRuntime(15917):    at com.raweng.fragmentdemo.ListData.updateIt(ListData.java:41)
12-17 18:18:06.740: E/AndroidRuntime(15917):    at com.raweng.fragmentdemo.ListData.onListItemClick(ListData.java:34)
12-17 18:18:06.740: E/AndroidRuntime(15917):    at android.app.ListFragment$2.onItemClick(ListFragment.java:160)
12-17 18:18:06.740: E/AndroidRuntime(15917):    at android.widget.AdapterView.performItemClick(AdapterView.java:298)
12-17 18:18:06.740: E/AndroidRuntime(15917):    at android.widget.AbsListView.performItemClick(AbsListView.java:1128)
12-17 18:18:06.740: E/AndroidRuntime(15917):    at android.widget.AbsListView$PerformClick.run(AbsListView.java:2812)
12-17 18:18:06.740: E/AndroidRuntime(15917):    at android.widget.AbsListView$1.run(AbsListView.java:3571)
12-17 18:18:06.740: E/AndroidRuntime(15917):    at android.os.Handler.handleCallback(Handler.java:725)
12-17 18:18:06.740: E/AndroidRuntime(15917):    at android.os.Handler.dispatchMessage(Handler.java:92)
12-17 18:18:06.740: E/AndroidRuntime(15917):    at android.os.Looper.loop(Looper.java:153)
12-17 18:18:06.740: E/AndroidRuntime(15917):    at android.app.ActivityThread.main(ActivityThread.java:5297)
12-17 18:18:06.740: E/AndroidRuntime(15917):    at java.lang.reflect.Method.invokeNative(Native Method)
12-17 18:18:06.740: E/AndroidRuntime(15917):    at java.lang.reflect.Method.invoke(Method.java:511)
12-17 18:18:06.740: E/AndroidRuntime(15917):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833)
12-17 18:18:06.740: E/AndroidRuntime(15917):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
12-17 18:18:06.740: E/AndroidRuntime(15917):    at dalvik.system.NativeStart.main(Native Method)

Any Help is Truly Appreciated...

Nitesh Tiwari
  • 4,742
  • 3
  • 28
  • 46

1 Answers1

4

It's because at time when you call details.setTextView(time); fragment's view was not created yet. You should pass time as argument into fragment. In your detail fragment class create this method

 public static Detail newInstance(String time) {
        Detail fragment = new Detail();
        Bundle args = new Bundle();
        args.putString("time", time);
        fragment.setArguments(args);
        return fragment;
 }

and then you can get time and set it in onCreateView:

@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {

        view_details = (ViewGroup) inflater.inflate( R.layout.details, container , false);
        TextView txt_view_details = (TextView) view_details.findViewById(R.id.txt_details);
        txt_view_details.setText(getArguments().getString("title"));
        return view_details;

    }

Then in your activity create fragment like this:

@Override
    public void connectIt(String time) {

        Details details = Details.newInstance(time);

        FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();

        fragmentTransaction.replace( R.id.frameLayout , details );

        fragmentTransaction.addToBackStack(null);

        fragmentTransaction.commit();

    }
Martin Vandzura
  • 3,047
  • 1
  • 31
  • 63