Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用FragmentInteractionListener将对象片段传输到不工作的片段_Java_Android_Android Fragments_Runtime Error_Android Fragmentactivity - Fatal编程技术网

Java 使用FragmentInteractionListener将对象片段传输到不工作的片段

Java 使用FragmentInteractionListener将对象片段传输到不工作的片段,java,android,android-fragments,runtime-error,android-fragmentactivity,Java,Android,Android Fragments,Runtime Error,Android Fragmentactivity,我使用onFragmentInteraction作为片段之间通信的函数。这两个片段分别是确认屏幕和详细信息表单。我打算从detailsForm发送类Person的对象(在MainActivity.java文件中声明)到确认屏幕。函数onFragmentInteraction是接口OnFragmentInteractionListener的一部分。接口在MainActivity.java文件中实现(函数实现)。职能机构是: @Override public void onFrag

我使用onFragmentInteraction作为片段之间通信的函数。这两个片段分别是确认屏幕和详细信息表单。我打算从detailsForm发送类Person的对象(在MainActivity.java文件中声明)到确认屏幕。函数onFragmentInteraction是接口OnFragmentInteractionListener的一部分。接口在MainActivity.java文件中实现(函数实现)。职能机构是:

     @Override
    public void onFragmentInteraction(Person person)
    {

        Confirm_Screen personinfoFrag = (Confirm_Screen)
                getSupportFragmentManager().findFragmentById(R.id.confirm_Screen);

    //    Log.d("name", "Taimoor");

       if (personinfoFrag!=null) {
            // If confirm frag is available, we're in two-pane layout...

            // Call a method in the confirm to update its content
            personinfoFrag.SetPerson(person);

            Log.d("name", "Taimoor");



        }
       else
       {
           FragmentTransaction transaction=getSupportFragmentManager().beginTransaction();
           transaction.replace(R.id.nav_host_fragment, personinfoFrag);
           transaction.addToBackStack(null);

           Log.d("name", "I am in else you dummies");
           personinfoFrag.SetPerson(person);
           transaction.commit();
       }
    }
下面是DetailsForm类(DetailsFrom.java)的onCreateView函数,其中调用了onFragmentInteraction:

     @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState)
    {
        // Inflate the layout for this fragment
        View view=inflater.inflate(R.layout.fragment_details_form, container, false);


        P= new Person();


        //Button Setting
        submitButton=(Button)view.findViewById(R.id.setperson);

        //Setting Values
        Name=((EditText)view.findViewById(R.id.inputName)).getText().toString();
        hairColor=((EditText)view.findViewById(R.id.inputHairColor)).getText().toString();
        CNIC=((EditText)view.findViewById(R.id.inputCNIC)).getText().toString();
        skinColor=((EditText)view.findViewById(R.id.inputSkinColor)).getText().toString();
        description=((EditText)view.findViewById(R.id.pDescription)).getText().toString();
        suspectedCrime=((EditText)view.findViewById(R.id.inputPersonCrime)).getText().toString();
        lastKnownLocation=((EditText)view.findViewById(R.id.inputLocation)).getText().toString();
        //viewholderColor=
       // imagename=
        P.setCNIC(CNIC);
        P.setDescription(description);
        P.setHairColor(hairColor);
        P.setImagename(Name);
        P.setLastKnownLocation(lastKnownLocation);
        P.setSuspectedCrime(suspectedCrime);
        P.setSkinColor(skinColor);

        submitButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view)
            {

                if (mListener != null) {
                    mListener.onFragmentInteraction(P);

                    Log.d("msg", "I am here");
                }

                Navigation.findNavController(view).navigate(R.id.action_detailsForm_to_confirm_Screen);
            }
        });

        return view;
    }

Here is the onAttach function in DetailsForm class(DetailsForm.java):

        @Override
    public void onAttach(Context context) {
        super.onAttach(context);
        if (context instanceof OnFragmentInteractionListener) {
            mListener = (OnFragmentInteractionListener) context;
        } else {
            throw new RuntimeException(context.toString()
                    + " must implement OnFragmentInteractionListener");
        }
    }


Here is where we set the person object newPerson in confirm_screen class(Confirm_Screen.java). The object newPerson is set with the person object passed in OnFragmentInteraction in DetailsForm class.


      //Setting Value of P
    public void SetPerson(Person person)
    {
        newPerson=person;

        Log.d("name", newPerson.getName());
    }
在这里,我们将person对象的属性设置为TextView,它将显示在屏幕上。 我们在Confirm_Screen类的onCreateView函数中设置值:

     public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment

        View view=inflater.inflate(R.layout.fragment_confirm__screen, container, false);

        ConfirmBtn=(Button)view.findViewById(R.id.confirmPerson);
        //Setting Values
/*
  public TextView pname;
    public TextView cnic;
    public TextView pDescription;
    public TextView pskinc;
    public TextView shairc;
    public TextView pcrime;
    public TextView Location;
 */

        pname=(TextView)view.findViewById(R.id.pname);
        pname.setText(newPerson.getName());
        shairc=(TextView)view.findViewById(R.id.shairc);
        shairc.setText(newPerson.getHairColor());
        cnic=(TextView)view.findViewById(R.id.CNIC);
        cnic.setText(newPerson.getCNIC());
        pskinc=(TextView)view.findViewById(R.id.pskinc);
        pskinc.setText(newPerson.getSkinColor());
        pDescription=(TextView)view.findViewById(R.id.pDescription);
        pDescription.setText(newPerson.getDescription());
        pcrime=(TextView)view.findViewById(R.id.pcrime);
        pcrime.setText(newPerson.getSuspectedCrime());
        Location=(TextView)view.findViewById(R.id.Location);
        Location.setText(newPerson.getLastKnownLocation());
    .....rest of the code
}
我们的问题是当我们在设备上运行应用程序并到达detailsForm时。当我们单击Details上的submit按钮时,表单消息显示:EAGLEVISION已停止工作

logcat控制台上的错误为: 尝试在空对象引用上调用虚拟方法“void android.widget.textview.settext(java.lang.charsequence)” 它所指向的setText函数在确认屏幕的OnCreateView中在线

供参考的人员类别为:


   class Person
   {

       private String ID;
       private String name;
       private String hairColor;
       private String CNIC;
       private String skinColor;
       private String description;
       private String suspectedCrime;
       private String lastKnownLocation;
       private int viewholderColor;
       private String idimageref;
       private String imagename;
   }

已经为每个属性编写了Getter/setter

如果有人能帮忙,我会很感激的