Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/228.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
Android 来自不同活动的两个片段之间的通信?_Android_Android Studio_Android Fragments - Fatal编程技术网

Android 来自不同活动的两个片段之间的通信?

Android 来自不同活动的两个片段之间的通信?,android,android-studio,android-fragments,Android,Android Studio,Android Fragments,我的应用程序中有两个活动。在MainActivity中,我正在加载2个片段Fragment1和Fragment2。从Fragment1我跳到Fragment2,从Fragment2我跳到Activity2,其中包含Fragment2\u 1从Fragment2\u 1我想跳回到main activity中的Fragment2,但我尝试这样做时出错了 java.lang.IllegalArgumentException: No view found for id 0x7f0b0059 (sales

我的应用程序中有两个活动。在
MainActivity
中,我正在加载2个片段
Fragment1
Fragment2
。从
Fragment1
我跳到
Fragment2
,从
Fragment2
我跳到
Activity2
,其中包含
Fragment2\u 1
Fragment2\u 1
我想跳回到
main activity
中的
Fragment2
,但我尝试这样做时出错了

java.lang.IllegalArgumentException: No view found for id 0x7f0b0059 (saleskit.orbitsys.com.fragmentdemo:id/mainContainer) for fragment Fragment2{29eb9c90 #1 id=0x7f0b0059 frag2_1}
我想知道是否可以从一个活动片段跳到另一个活动片段

java.lang.IllegalArgumentException: No view found for id 0x7f0b0059 (saleskit.orbitsys.com.fragmentdemo:id/mainContainer) for fragment Fragment2{29eb9c90 #1 id=0x7f0b0059 frag2_1}
我的代码是:

java.lang.IllegalArgumentException: No view found for id 0x7f0b0059 (saleskit.orbitsys.com.fragmentdemo:id/mainContainer) for fragment Fragment2{29eb9c90 #1 id=0x7f0b0059 frag2_1}
MainActivity.java

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        FragmentTransaction fragmentTransaction=getSupportFragmentManager().beginTransaction();
        Fragment fragment1=new Fragment1();
        fragmentTransaction.replace(R.id.mainContainer,fragment1,"MainActivity");
        fragmentTransaction.addToBackStack(null);
        fragmentTransaction.commit();


    }
}
java.lang.IllegalArgumentException: No view found for id 0x7f0b0059 (saleskit.orbitsys.com.fragmentdemo:id/mainContainer) for fragment Fragment2{29eb9c90 #1 id=0x7f0b0059 frag2_1}
Fragment1.java:

public class Fragment1 extends Fragment {


    public Fragment1() {
        // Required empty public constructor
    }


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
       View view=inflater.inflate(R.layout.fragment_fragment1, container, false);
        Button buttonfrag1=(Button)view.findViewById(R.id.buttonfrag1);
        buttonfrag1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                FragmentManager fragmentManager=getActivity().getSupportFragmentManager();
                FragmentTransaction fragmentTransaction=fragmentManager.beginTransaction();
                Fragment2 fragment2 = new Fragment2();
                fragmentTransaction.replace(R.id.mainContainer,fragment2,"Fragment1");
                fragmentTransaction.addToBackStack(null);
                fragmentTransaction.commit();

            }
        });

        return view;
    }
java.lang.IllegalArgumentException: No view found for id 0x7f0b0059 (saleskit.orbitsys.com.fragmentdemo:id/mainContainer) for fragment Fragment2{29eb9c90 #1 id=0x7f0b0059 frag2_1}
Fragment2.java

public class Fragment2 extends Fragment {


    public Fragment2() {
        // Required empty public constructor
    }


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View view= inflater.inflate(R.layout.fragment_fragment2, container, false);
        Button buttonfrag2=(Button)view.findViewById(R.id.buttonfrag2);
        buttonfrag2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent=new Intent(getActivity(),Activity2.class);
                startActivity(intent);

            }
        });

        return view;

    }

}
java.lang.IllegalArgumentException: No view found for id 0x7f0b0059 (saleskit.orbitsys.com.fragmentdemo:id/mainContainer) for fragment Fragment2{29eb9c90 #1 id=0x7f0b0059 frag2_1}
Activity2.java

public class Activity2 extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_2);
        FragmentTransaction fragmentTransaction=getSupportFragmentManager().beginTransaction();
        Fragment2_1 fragment2_1=new Fragment2_1();
        fragmentTransaction.replace(R.id.frag2_1,fragment2_1,"Activity2");
        fragmentTransaction.commit();


    }
}
java.lang.IllegalArgumentException: No view found for id 0x7f0b0059 (saleskit.orbitsys.com.fragmentdemo:id/mainContainer) for fragment Fragment2{29eb9c90 #1 id=0x7f0b0059 frag2_1}
碎片2_1.java

public class Fragment2_1 extends Fragment {


    public Fragment2_1() {
        // Required empty public constructor
    }


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

        View view= inflater.inflate(R.layout.fragment_fragment2_1, container, false);
        Button buttonfrag2_1=(Button)view.findViewById(R.id.buttonfrag2_1);
        buttonfrag2_1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
               FragmentTransaction fragmentTransaction=getFragmentManager().beginTransaction();
                Fragment2 fragment2=new Fragment2();
                fragmentTransaction.replace(R.id.mainContainer,fragment2,"frag2_1");
                fragmentTransaction.addToBackStack(null);

                fragmentTransaction.commit();
            }
        });

        return view;
    }

}
java.lang.IllegalArgumentException: No view found for id 0x7f0b0059 (saleskit.orbitsys.com.fragmentdemo:id/mainContainer) for fragment Fragment2{29eb9c90 #1 id=0x7f0b0059 frag2_1}
所有代码都可以正常工作,但当我想从Fragment2_1移动到Fragment1时,我的应用程序崩溃,出现一个异常:

java.lang.IllegalArgumentException: No view found for id 0x7f0b0059 (saleskit.orbitsys.com.fragmentdemo:id/mainContainer) for fragment Fragment2{29eb9c90 #1 id=0x7f0b0059 frag2_1}

试试这个:在Fragment2\u 1中

java.lang.IllegalArgumentException: No view found for id 0x7f0b0059 (saleskit.orbitsys.com.fragmentdemo:id/mainContainer) for fragment Fragment2{29eb9c90 #1 id=0x7f0b0059 frag2_1}
 buttonfrag2_1.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                   Intent intent = new Intent(getActivity(), MainActivity.class);
                    intent.putExtra("frag", "fragment2");
                    startActivity(intent);
                }
            });
现在在Mainactivity
onResume()
中,将所需的片段加载到
maincainer

java.lang.IllegalArgumentException: No view found for id 0x7f0b0059 (saleskit.orbitsys.com.fragmentdemo:id/mainContainer) for fragment Fragment2{29eb9c90 #1 id=0x7f0b0059 frag2_1}
main活动中

java.lang.IllegalArgumentException: No view found for id 0x7f0b0059 (saleskit.orbitsys.com.fragmentdemo:id/mainContainer) for fragment Fragment2{29eb9c90 #1 id=0x7f0b0059 frag2_1}
    @Override
public void onResume(){
  super.onResume();

  Intent intent = getIntent();

if(intent.getExtras() != null)
{
 String frag = intent.getStringExtra("frag");
}


  switch(frag){

    case "fragment2":
       //here you can load Fragment2 to your activity as usual;
        fragmentManager.beginTransaction().replace(R.id.mainContainer, new Fragment2()).commit();
       break;
  }
}

在第二个活动中的
Fragment2\u 1
中,您试图将
Fragment2
放入容器
R.id.mainCainer
。您的代码如下:

java.lang.IllegalArgumentException: No view found for id 0x7f0b0059 (saleskit.orbitsys.com.fragmentdemo:id/mainContainer) for fragment Fragment2{29eb9c90 #1 id=0x7f0b0059 frag2_1}
FragmentTransaction fragmentTransaction=getFragmentManager().beginTransaction();
Fragment2 fragment2=new Fragment2();
fragmentTransaction.replace(R.id.mainContainer,fragment2,"frag2_1");
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
但由于您当前在第二个活动中,所以该容器不存在(它是第一个活动的一部分)。您需要再次加载
main活动
,或者通过调用
finish()
完成
Activity2
。如果您这样做,以后的android会自动将您带回您的
main活动
,并且自从您从
Fragment2
移动到
Activity2
之后,android也会记住这一点并向您显示
Fragment2

java.lang.IllegalArgumentException: No view found for id 0x7f0b0059 (saleskit.orbitsys.com.fragmentdemo:id/mainContainer) for fragment Fragment2{29eb9c90 #1 id=0x7f0b0059 frag2_1}
您的碎片2\u 1应如下所示:

java.lang.IllegalArgumentException: No view found for id 0x7f0b0059 (saleskit.orbitsys.com.fragmentdemo:id/mainContainer) for fragment Fragment2{29eb9c90 #1 id=0x7f0b0059 frag2_1}
public class Fragment2_1 extends Fragment {

    public Fragment2_1() {
        // Required empty public constructor
    }


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

        View view= inflater.inflate(R.layout.fragment_fragment2_1, container, false);
        Button buttonfrag2_1=(Button)view.findViewById(R.id.buttonfrag2_1);
        buttonfrag2_1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
               getActivity().finish();
            }
        });

        return view;
    }

}
,如果您只想在第二个活动中显示
片段2
,您可以执行以下操作:

java.lang.IllegalArgumentException: No view found for id 0x7f0b0059 (saleskit.orbitsys.com.fragmentdemo:id/mainContainer) for fragment Fragment2{29eb9c90 #1 id=0x7f0b0059 frag2_1}
public class Fragment2_1 extends Fragment {


    public Fragment2_1() {
        // Required empty public constructor
    }


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

        View view= inflater.inflate(R.layout.fragment_fragment2_1, container, false);
        Button buttonfrag2_1=(Button)view.findViewById(R.id.buttonfrag2_1);
        buttonfrag2_1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
               FragmentTransaction fragmentTransaction=getFragmentManager().beginTransaction();
                Fragment2 fragment2=new Fragment2();
                fragmentTransaction.replace(R.id.frag2_1,fragment2,"frag2");
                fragmentTransaction.addToBackStack(null);

                fragmentTransaction.commit();
            }
        });

        return view;
    }

}
R.id.frag2_1
是需要替换片段的容器

java.lang.IllegalArgumentException: No view found for id 0x7f0b0059 (saleskit.orbitsys.com.fragmentdemo:id/mainContainer) for fragment Fragment2{29eb9c90 #1 id=0x7f0b0059 frag2_1}

注意:您仍将处于第二个活动中。只有片段将被替换。

嘿,谢谢您的回复,但根据您的回答,我正在进行活动2,当用户单击Fragment2\u 1的按钮添加此
fragmentTransaction.replace(R.id.Fragment2\u 1,Fragment2,“Fragment2\u 1”)在您的
Fragment2\u 1上
转到
Fragment2
异常发生,因为您在Fragment2\u 1的事务中向Fragment2Id传递了错误的id。先生,我知道我可以通过此操作跳过Fragment2。但是现在片段2已加载到Activity2容器中,我想将片段2加载到maincontainer中。请您帮助@rafsanahmadDid获取答案吗?检查下面我的答案@问题是,先生。我不能完成第二项活动。@champadorid你不能还是不想?
java.lang.IllegalArgumentException: No view found for id 0x7f0b0059 (saleskit.orbitsys.com.fragmentdemo:id/mainContainer) for fragment Fragment2{29eb9c90 #1 id=0x7f0b0059 frag2_1}