Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/223.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 Activity_Android Fragments - Fatal编程技术网

Android 在同一容器中的片段之间切换

Android 在同一容器中的片段之间切换,android,android-activity,android-fragments,Android,Android Activity,Android Fragments,我的活动中有两个按钮。当我单击按钮1时,我显示一个片段,当我单击按钮2时,我显示同一容器中的另一个片段。对于每个片段,我设置了一个标记,这样,如果再次单击按钮,我将只替换容器中的片段。问题是,当我再次单击第二个按钮时,findFragmentByTag返回“null”,片段再次加载。 这是我正在使用的代码 Button button1= (Button) findViewById(R.id.button1); button1.setOnClickListener(new OnCl

我的活动中有两个按钮。当我单击按钮1时,我显示一个片段,当我单击按钮2时,我显示同一容器中的另一个片段。对于每个片段,我设置了一个标记,这样,如果再次单击按钮,我将只替换容器中的片段。问题是,当我再次单击第二个按钮时,findFragmentByTag返回“null”,片段再次加载。 这是我正在使用的代码

    Button button1= (Button) findViewById(R.id.button1);
    button1.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            MyFragment myFragment = (MyFragment) fragmentManager.findFragmentByTag("button1");
            FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
            if(myFragment==null){
                MyFragment fragment = new MyFragment();
                fragmentTransaction.add(R.id.container, fragment, "button1");                   
                fragmentTransaction.commit();
            }else{                  
                fragmentTransaction.replace(R.id.container, myFragment, "button1");                 
                fragmentTransaction.commit();
            }

        }
    });
    Button button2= (Button) findViewById(R.id.button2);
    button2.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            MyFragment myFragment = (MyFragment) fragmentManager.findFragmentByTag("button2");// always return null
            FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
            if(myFragment==null){
                MyFragment fragment = new MyFragment();
                fragmentTransaction.add(R.id.container, fragment, "button2");                   
                fragmentTransaction.commit();
            }else{
                fragmentTransaction.replace(R.id.container, myFragment, "button2");                 
                fragmentTransaction.commit();
            }
        }
    });
在上面的代码中,fragmentManager.findFragmentByTag(“button2”)始终返回null。 有人能告诉我如何让它工作吗。我见过其他线程,但找不到任何解决方案

蒂亚,
VijayRaj

在调用新事务之前,必须执行挂起的事务。试试这个:

getSupportFragmentManager().executePendingTransactions()
编辑

用FragmentTransaction替换片段后,必须将其添加到backbackback中。

fragmentTransaction.addToBackStack(button1);

我在调用fragmentManager.beginTransaction()之前添加了这个,但它仍然不起作用啊,我现在看到了,在替换之后,您不会发送事务addToBackStack(button1)。干杯我应该在哪里将其添加到后台??在我的onclicklistener中,按钮1或按钮2??用于每个。我已经更新了我的awnser,对它进行了一般性的解释,如果你替换一个片段,你必须将它添加到backstack,这意味着对于每次事务替换,你必须将替换的片段添加到backstack。addtoBackStack不是我想要的…我正在使用fragmentTransaction的隐藏和显示方法在两个片段之间切换