当前位置: 首页 > 知识库问答 >
问题:

改变屏幕方向后,片段被复制

范振海
2023-03-14

我有一个以编程方式创建片段的活动。该片段内部有另一个片段。

活动包含片段A。片段A包含片段B。

如果(savedInstanceState==null){

}

但对我不起作用!

    null
    null

活动:

public class Activity extends AppCompatActivity {

    ScrollView sv;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity);

            LinearLayout ll = (LinearLayout) findViewById(R.id.ll);
            sv = findViewById(R.id.sv);


            LinearLayout ll_fragment = new LinearLayout(this);
            ll_fragment.setId(100);
            ll_fragment.setOrientation(LinearLayout.VERTICAL);

            LinearLayout.LayoutParams LLParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT);
            ll_fragment.setLayoutParams(LLParams);

            ll.addView(ll_fragment);


            FragmentManager fragmentManager = getSupportFragmentManager();
            FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();


            ArrayList<Integer> AL_Int = new ArrayList<Integer>();
            AL_Int.add(sv.getId());
            fragment = FragmentA.newInstance(AL_Int);
            fragmentTransaction.add(ll_fragment.getId(), fragment);
            fragmentTransaction.commit();

    }

片段:

public class FragmentA extends Fragment {

    public static FragmentA newInstance(ArrayList<Integer> AL_Int_sv_ID) {


        FragmentA f = new FragmentA();
        Bundle b = new Bundle();
        if(AL_Int_sv_ID.get(0) != null){
            b.putInt("int_sv_ID", AL_Int_sv_ID.get(0));
            b.putBoolean("bool_sv", true);
        }else{
            b.putInt("int_sv_ID", -1);
            b.putBoolean("bool_sv", false);
        }

        f.setArguments(b);
        return f;


    }


    @Override
    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        Bundle args = getArguments();
        if (args != null) {

            int int_ScrollView_ID = args.getInt("int_sv_ID");
            boolean bool_ScrollView = args.getBoolean("bool_sv");

            bool_sv = bool_ScrollView;
            int_sv_ID = int_ScrollView_ID;

            if(bool_sv){
                sv = getActivity().findViewById(int_ScrollView_ID);
                sv = FA.findViewById(int_ScrollView_ID);
            }

        }


    }


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


        LinearLayout ll = new LinearLayout(getActivity());
        ll.setOrientation(LinearLayout.VERTICAL);

        LLParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.MATCH_PARENT);
        ll.setLayoutParams(LLParams);
        ll.setId(20);


        FragmentTransaction transaction = getChildFragmentManager().beginTransaction();

        FragmentB fragmentB = new FragmentB();

        transaction.add(20, fragmentB);
        transaction.commit();


        return ll;

}

共有1个答案

宋飞文
2023-03-14

您需要重试if(savedInstanceState==null)方法。这是正确的处理方法,您可能做错了什么,只需在if中包装这3行:

fragment = AutoCompleteTextView_Fragment.newInstance(AL_Int); 
fragmentTransaction.add(ll_fragment.getId(), fragment); 
fragmentTransaction.commit();
 类似资料:
  • 我有两个选项卡的活动,它实现了两个相似的片段,每个片段都由GridView组成,通过AsyncTask加载项目,它工作正常,直到屏幕方向改变。。。在这之后,只能单击操作栏并在选项卡之间切换,但GridView完全停止与用户交互:滚动、单击或其他任何操作。只实现了标准的onSaveInstanceState(Bundle outState)和onRestoreInstanceState(Bundle

  • 我有一个活动与行动栏标签。每个选项卡都包含一个片段。现在,当我旋转我的设备时,我的相应片段中的bundle是空的。当我使用Android3.2后的设备时,这是小心的,但当设备是Android3.0时,这是发生的。我在这个问题上工作后感到头痛。我就这样勾选了各种链接,但无济于事。虽然我已经给出了足够的细节,但仍然会提供一些代码段作为在各种情况下用户要求的代码段。 在我的片段类中,我存储了这个值

  • 本文向大家介绍Android改变手机屏幕朝向的方法,包括了Android改变手机屏幕朝向的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Android改变手机屏幕朝向的方法。分享给大家供大家参考。具体如下: 模拟当点击按钮时,使手机朝向发生改变。 main.xml布局文件: 清单文件: OrientationActivity类: 运行结果: 希望本文所述对大家的Android程序设计

  • 所以我正在用Visual Studio编写一个Android应用程序。我想要一个既有纵向又有横向的活动。当我打开我的设备时,我的活动中的数据消失了。所以我在网上查了一下,找到了一行放在清单中的数据,这很有效!Android:config changes = " orientation | keyboard hidden | screen size "除了我所有的视图都是无序的、错位的。我使用了两种

  • 我正在向运行的activity添加一个带有WindowManager的相机覆盖。当我启动相机并调用WindowManager时,它将我的屏幕从纵向变为横向,即使我为WindowManager.LayoutParams分配了适当的纵向标记。还没能通过谷歌找到任何解决方案。 下面是我在服务中的方法中运行的WindowManager代码: 布局r.layout.camera只是我将相机添加到的Frame

  • null 我想保留的最后一个查看页面索引,当活动因任何原因重新创建时,例如方向改变。 位于附加到活动的(名为)中。我使用的是compat库,因此该片段是的子类。 我认为可以通过重写方法并在中添加适当的逻辑来完成,如文档中所述: 为了正确地处理重启,重要的是您的活动通过正常的活动生命周期恢复其以前的状态,在正常的活动生命周期中,Android在破坏您的活动之前调用onSaveInstanceStat