小编max*_*der的帖子

使用support.v7.preference时,首选项子屏幕无法打开

我正在尝试使用AppCompatActivity和support.v7.preference在子屏幕上实现首选项

根据文档,另一个PreferenceScreen中的每个PreferenceScreen都用作子屏幕,框架将处理单击时显示它. http://developer.android.com/guide/topics/ui/settings.html#Subscreens

<PreferenceScreen  xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- opens a subscreen of settings -->
    <PreferenceScreen
        android:key="button_voicemail_category_key"
        android:title="@string/voicemail"
        android:persistent="false">
        <ListPreference
            android:key="button_voicemail_provider_key"
            android:title="@string/voicemail_provider" ... />
        <!-- opens another nested subscreen -->
        <PreferenceScreen
            android:key="button_voicemail_setting_key"
            android:title="@string/voicemail_settings"
            android:persistent="false">
            ...
        </PreferenceScreen>
        <RingtonePreference
            android:key="button_voicemail_ringtone_key"
            android:title="@string/voicemail_ringtone_title"
            android:ringtoneType="notification" ... />
        ...
    </PreferenceScreen>
    ...
</PreferenceScreen>
Run Code Online (Sandbox Code Playgroud)

这可以使用本机Activity,PreferenceFragment工作正常...但是使用AppCompatActivity和PreferenceFragmentCompat,单击Preference元素只会突出显示它,但不会打开子屏幕.

我在这个文档和代码上找不到任何东西......我需要实现任何额外的回调吗?


编辑:只是为了完整...

这可以工作并打开子屏幕:

public class MainActivity extends Activity {

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

        if (savedInstanceState == null) {
            getFragmentManager().beginTransaction()
                    .replace(android.R.id.content, new DemoPreferenceFragment())
                    .commit();
        }
    }

    static public class DemoPreferenceFragment extends PreferenceFragment {

        @Override …
Run Code Online (Sandbox Code Playgroud)

android android-appcompat android-preferences

25
推荐指数
2
解决办法
8011
查看次数

如何使用support.v7.preference与AppCompat和潜在的缺点

我正在尝试使用support.v7.preference实现AppCompat应用程序的首选项.我花了几天时间来完成它,因为support.v7.preference与原生偏好有一些显着的差异......一旦你知道这一点并不是太糟糕,但遗憾的是那里的文档很少.我以为我会分享我的发现,所以其他人不必经历同样的痛苦.


所以......问题:

您如何最好地实现AppCompat应用程序的首选项(PreferenceFragment和AppCompatAcitivity不兼容)?

以下是一些相关问题:

官方文件:

android android-appcompat android-preferences preferencescreen preference-v7

17
推荐指数
1
解决办法
1万
查看次数

Android片段 - findFragmentByTag始终返回null

我已经浏览了一下并发现了几个类似主题的问题,但在我的案例中没有任何帮助.我正在尝试使用getSupportFragmentManager().findFragmentByTag(TAG)访问现有的活动片段,但它总是返回null.对类似问题的回复表明,执行提交需要一段时间,因此如果过早调用,调用findFragmentByTag将返回null.我尝试了两件事:

  • 在提交后立即添加getSupportFragmentManager().executePendingTransactions()
    ,但仍然为null.
  • 添加了一个按钮...在创建活动后按此按钮,注册的片段和显示的视图应该让系统有足够的时间提交.但我仍然无效.

这是我的活动:

public class MainActivity extends ActionBarActivity {

private static final String F_SETTINGS = "f_settings";

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

    setContentView(R.layout.activity_main);

    Button btn = (Button) findViewById(R.id.btn);
    btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            debug();
        }
    });

    if (savedInstanceState == null) {
        FSettings newFragment = new FSettings();
        FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
        ft.replace(R.id.container, newFragment);
        ft.addToBackStack(F_SETTINGS);
        ft.commit();
        // getSupportFragmentManager().executePendingTransactions();
        //// Activating this did not make any difference... …
Run Code Online (Sandbox Code Playgroud)

android android-fragments android-support-library

9
推荐指数
1
解决办法
2万
查看次数