【问题标题】:Android scrolling shows double contentAndroid滚动显示双重内容
【发布时间】:2016-03-03 23:11:07
【问题描述】:

如果我在我的设置活动中滚动,内容会显示两次。在横向模式下似乎有一个可以滚动的新图层,而下面的图层不会移动。

这是怎么回事?我并没有在这个类中添加太多代码。

可能是我犯的一个愚蠢的错误。抱歉 - 我是 Android 新手。

感谢您的回答。

public class AppPreferences extends AppCompatActivity {

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);

            android.app.FragmentManager fragmentManager = getFragmentManager();
            android.app.FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
            SettingsFragment settingsFragment = new SettingsFragment();
            fragmentTransaction.add(android.R.id.content, settingsFragment, "SETTINGS_FRAGMENT");
            fragmentTransaction.commit();
        }

        public static class SettingsFragment extends PreferenceFragment {
            @Override
            public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                addPreferencesFromResource(R.xml.app_preferences);
            }
        }
    }

【问题讨论】:

    标签: android vertical-scrolling


    【解决方案1】:

    当您旋转设备时,框架正在创建片段,因此您不应该创建它。

    这样做:

    @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
    
            if (savedInstanceState == null) {
                android.app.FragmentManager fragmentManager = getFragmentManager();
                android.app.FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
                SettingsFragment settingsFragment = new SettingsFragment();
                fragmentTransaction.add(android.R.id.content, settingsFragment, "SETTINGS_FRAGMENT");
                fragmentTransaction.commit();
            }
        }
    

    【讨论】:

    • 谢谢 - 就是这样。我没有发现在这种状态下的活动有不同的行为。
    • 看看我的回答为什么你会得到两次
    • 你也应该使用我的答案来避免任何其他问题
    【解决方案2】:

    改变

    fragmentTransaction.add(android.R.id.content, settingsFragment, "SETTINGS_FRAGMENT");
                fragmentTransaction.commit();
    

    fragmentTransaction.replace(android.R.id.content, settingsFragment, "SETTINGS_FRAGMENT");
                fragmentTransaction.commit();
    

    也这样做:

    @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
    
            if (savedInstanceState == null) {
                android.app.FragmentManager fragmentManager = getFragmentManager();
                android.app.FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
                SettingsFragment settingsFragment = new SettingsFragment();
                fragmentTransaction.add(android.R.id.content, settingsFragment, "SETTINGS_FRAGMENT");
                fragmentTransaction.commit();
            }
        }
    

    根据@Francesc 的建议,它将保持您的片段状态,因此您不会丢失状态。

    您正在添加片段而不是替换,这就是您看到片段两次的原因。

    【讨论】:

    • 感谢您的提示!
    • 基本上当框架重新创建它时,它会再次添加到您的视图中,因此您会看到两个正在添加的片段
    • 请接受我或 francesc 回答谁帮助更多
    • 很遗憾。我将不胜感激。
    • 没问题,你可以接受任何你觉得,帮助你更好的人
    猜你喜欢
    • 2013-07-13
    • 2018-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-12
    • 2014-08-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多