-1

I try to call Fragment method from Activity. Need to set text t1..t6 (which are in fragment.xml) from activity. So there is an error

FATAL EXCEPTION: java.lang.NullPointerException: Attempt to invoke virtual method 'void PageFragment.setTime(java.lang.String)' on a null object reference.

PageFragment.java

public class PageFragment extends Fragment {

        static final String ARGUMENT_PAGE_NUMBER = "arg_page_number";
        TextView t1,t2,t3,t4,t5,t6;
        int pageNumber;

        static PageFragment newInstance(int page) {
            PageFragment pageFragment = new PageFragment();
            Bundle arguments = new Bundle();
            arguments.putInt(ARGUMENT_PAGE_NUMBER, page);

            pageFragment.setArguments(arguments);
            return pageFragment;
        }

        @Override
        public void onAttach(Activity activity) {
            super.onAttach(activity);   
        }

        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            pageNumber = getArguments().getInt(ARGUMENT_PAGE_NUMBER);
        }

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                 Bundle savedInstanceState) {
            View view = inflater.inflate(R.layout.fragment, null);
            t1=(TextView)view.findViewById(R.id.t1);
            t2=(TextView)view.findViewById(R.id.t2);
            t3=(TextView)view.findViewById(R.id.t3);
            t4=(TextView)view.findViewById(R.id.t4);
            t5=(TextView)view.findViewById(R.id.t5);
            t6=(TextView)view.findViewById(R.id.t6);
            return view;
        }

        public void setTime(String a){
            t1.setText(a);
        }
    }

Schedule.java

FragmentManager fm = getSupportFragmentManager();
PageFragment fragment =(PageFragment)fm.findFragmentById(R.id.RelativeLayout1);
fragment.setTime((input1.getText().toString()));
Oleg
  • 1
  • 2

1 Answers1

0

The way you are trying to pass data to fragment is wrong.This is the correct way

Schedule.java

 Bundle bundle = new Bundle();
 bundle.putString("arg_page_number", input1.getText().toString());
 // set Fragmentclass Arguments
 PageFragment fragobj = new PageFragment();
 fragobj.setArguments(bundle);

PageFragment.java

Receive data inside fragment onCreateView method

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
     View view = inflater.inflate(R.layout.fragment, null);
     pageNumber = getArguments().getInt(ARGUMENT_PAGE_NUMBER,0);
     t1=(TextView)view.findViewById(R.id.t1);
     t2=(TextView)view.findViewById(R.id.t2);
               .......           
    return view;
   }

Again, you are extending your class to Fragment. OnCreate method is not needed.

John Joe
  • 12,412
  • 16
  • 70
  • 135