Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.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 PreferenceFragment按钮(首选项)未启用,但CheckBoxPreference起作用_Android_Actionbarsherlock_Android Preferences_Preferencefragment - Fatal编程技术网

Android PreferenceFragment按钮(首选项)未启用,但CheckBoxPreference起作用

Android PreferenceFragment按钮(首选项)未启用,但CheckBoxPreference起作用,android,actionbarsherlock,android-preferences,preferencefragment,Android,Actionbarsherlock,Android Preferences,Preferencefragment,我用安卓首选项设置了活动设置 在我的设置活动中扩展了SherlockFragmentActivity,因此我决定使用首选片段 我创建了一个自定义类,它扩展了PreferenceFragment,名为GenericPreferenceFragment,从资源加载我的首选项xml 首选项是2个按钮和2个复选框 在我的Nexus上一次安卓升级时,所有的功能都很好,但在三星安卓4.2上,按钮似乎没有启用(它们是灰色的) 这里有一个屏幕: 为什么这样做?我怎样才能解决这个问题 代码: 这是我的com.

我用安卓首选项设置了
活动设置

在我的
设置活动中
扩展了
SherlockFragmentActivity
,因此我决定使用首选片段

我创建了一个自定义类,它扩展了
PreferenceFragment
,名为
GenericPreferenceFragment
,从资源加载我的首选项xml

首选项是2个按钮和2个复选框

在我的Nexus上一次安卓升级时,所有的功能都很好,但在三星安卓4.2上,按钮似乎没有启用(它们是灰色的)

这里有一个屏幕:

为什么这样做?我怎样才能解决这个问题


代码:

这是我的com.xxx.yyy.SettingsActivity的一部分:

public class SettingsActivity extends SherlockFragmentActivity implements
        OnPreferenceClickListener, OnClickListener {

    private final String TAG = "SETTINGS";
    private ImageButton homeButton;
    private ImageButton settingsButton;
    private TextView activityTitle;

    private ProgressDialog pDialog;
    private GenericPreferenceFragment gPrefFragment;

    private CheckBoxPreference cbpGCM;
    private CheckBoxPreference cbpMail;
    private Preference pKeywords;
    private Preference pLogout;



    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        return super.onOptionsItemSelected(item);
    }


    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_settings);

        setupActionBar();
        gPrefFragment = (GenericPreferenceFragment) getFragmentManager().findFragmentById(R.id.pref_frag_id);

        FontsOverride.setDefaultFont(getApplicationContext(), "DEFAULT",
                "OpenSans-Regular.ttf");
        layoutInitializer();
    }

    // @Override
    // public void onBuildHeaders(List<Header> target) {
    // loadHeadersFromResource(R.xml.preference_headers, target);
    // }

    private void setupActionBar() {
        getSupportActionBar();
        getSupportActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);
        getSupportActionBar().setCustomView(R.layout.custom_abs_layout);
    }

    private void layoutInitializer() {
        pDialog = DialogUtil.makeDialog(SettingsActivity.this);

        // --- ACTIONBAR ---
        homeButton = (ImageButton) findViewById(R.id.button_menu_home);
        settingsButton = (ImageButton) findViewById(R.id.button_menu_settings);
        activityTitle = (TextView) findViewById(R.id.tv_activity_title);
        activityTitle.setText(R.string.title_settings);

        homeButton.setBackgroundResource(0);
        settingsButton.setBackgroundResource(0);
        homeButton.setImageDrawable(getResources().getDrawable(R.drawable.ic_return));


        cbpGCM = (CheckBoxPreference)  gPrefFragment.findPreference("pref_device_notification");
        cbpMail = (CheckBoxPreference)  gPrefFragment.findPreference("pref_mail_notification");
        pKeywords = (Preference)  gPrefFragment.findPreference("pref_keyword");
        pLogout = (Preference)  gPrefFragment.findPreference("pref_logout");

        pKeywords.setOnPreferenceClickListener(this);
        pLogout.setOnPreferenceClickListener(this);
        cbpMail.setOnPreferenceClickListener(this);
        cbpGCM.setOnPreferenceClickListener(this);

        homeButton.setOnClickListener(this);


        // set button on/off
          ...
        cbpGCM.setChecked(gcmStatus);
        cbpMail.setChecked(mailStatus);
    }

    @Override
    public boolean onPreferenceClick(Preference preference) {
        String key = preference.getKey();
        if (key.equalsIgnoreCase("pref_keyword")) {
            finish();
            startActivity(...);
        } else if (key.equalsIgnoreCase("pref_logout")) {
            getLogout();
        }else if (key.equalsIgnoreCase("pref_device_notification")) {
            boolean status = cbpGCM.isChecked();
            switchGCM(status);
        } else if (key.equalsIgnoreCase("pref_mail_notification")) {
            boolean status = cbpMail.isChecked();
            switchMail(status);
        }

        return false;
    }
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#" >

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_margin="10dp"
        android:background="#"
        android:orientation="vertical" >

        <fragment
            android:id="@+id/pref_frag_id"
            android:name="com.xxx.yyy.GenericPreferenceFragment"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent" />
    </LinearLayout>

 </LinearLayout>
public class GenericPreferenceFragment extends PreferenceFragment {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.preferences);

    }
}
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="#" >

    <PreferenceCategory
        android:key="pref_keyword_settings"
        android:title="@string/label_keyword_settings" >
        <Preference
            android:dependency="pref_keyword_settings"
            android:icon="@drawable/ic_keyword_settings"
            android:key="pref_keyword"
            android:summary="@string/description_keyword_preference"
            android:title="@string/title_keyword_preference" />
    </PreferenceCategory>


    <PreferenceCategory
        android:key="pref_notification_settings"
        android:title="@string/label_notification_settings" >
        <CheckBoxPreference
            android:defaultValue="true"
            android:icon="@drawable/ic_notification_settings"
            android:key="pref_device_notification"
            android:summary="@string/description_device_notification"
            android:title="@string/title_device_notification" />
        <CheckBoxPreference
            android:defaultValue="true"
            android:icon="@drawable/ic_mail_settings"
            android:key="pref_mail_notification"
            android:summary="@string/description_mail_notification"
            android:title="@string/title_mail_notification" />
    </PreferenceCategory>


    <PreferenceCategory
        android:key="pref_logout_settings"
        android:title="@string/label_logout_settings" >
        <Preference
            android:dependency="pref_logout_settings"
            android:icon="@drawable/ic_logout"
            android:key="pref_logout"
            android:enabled="true"
            android:summary="@string/description_logout_preference"
            android:title="@string/title_logout_preference" />
    </PreferenceCategory>

</PreferenceScreen>
这是R.xml.preferences

public class SettingsActivity extends SherlockFragmentActivity implements
        OnPreferenceClickListener, OnClickListener {

    private final String TAG = "SETTINGS";
    private ImageButton homeButton;
    private ImageButton settingsButton;
    private TextView activityTitle;

    private ProgressDialog pDialog;
    private GenericPreferenceFragment gPrefFragment;

    private CheckBoxPreference cbpGCM;
    private CheckBoxPreference cbpMail;
    private Preference pKeywords;
    private Preference pLogout;



    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        return super.onOptionsItemSelected(item);
    }


    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_settings);

        setupActionBar();
        gPrefFragment = (GenericPreferenceFragment) getFragmentManager().findFragmentById(R.id.pref_frag_id);

        FontsOverride.setDefaultFont(getApplicationContext(), "DEFAULT",
                "OpenSans-Regular.ttf");
        layoutInitializer();
    }

    // @Override
    // public void onBuildHeaders(List<Header> target) {
    // loadHeadersFromResource(R.xml.preference_headers, target);
    // }

    private void setupActionBar() {
        getSupportActionBar();
        getSupportActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);
        getSupportActionBar().setCustomView(R.layout.custom_abs_layout);
    }

    private void layoutInitializer() {
        pDialog = DialogUtil.makeDialog(SettingsActivity.this);

        // --- ACTIONBAR ---
        homeButton = (ImageButton) findViewById(R.id.button_menu_home);
        settingsButton = (ImageButton) findViewById(R.id.button_menu_settings);
        activityTitle = (TextView) findViewById(R.id.tv_activity_title);
        activityTitle.setText(R.string.title_settings);

        homeButton.setBackgroundResource(0);
        settingsButton.setBackgroundResource(0);
        homeButton.setImageDrawable(getResources().getDrawable(R.drawable.ic_return));


        cbpGCM = (CheckBoxPreference)  gPrefFragment.findPreference("pref_device_notification");
        cbpMail = (CheckBoxPreference)  gPrefFragment.findPreference("pref_mail_notification");
        pKeywords = (Preference)  gPrefFragment.findPreference("pref_keyword");
        pLogout = (Preference)  gPrefFragment.findPreference("pref_logout");

        pKeywords.setOnPreferenceClickListener(this);
        pLogout.setOnPreferenceClickListener(this);
        cbpMail.setOnPreferenceClickListener(this);
        cbpGCM.setOnPreferenceClickListener(this);

        homeButton.setOnClickListener(this);


        // set button on/off
          ...
        cbpGCM.setChecked(gcmStatus);
        cbpMail.setChecked(mailStatus);
    }

    @Override
    public boolean onPreferenceClick(Preference preference) {
        String key = preference.getKey();
        if (key.equalsIgnoreCase("pref_keyword")) {
            finish();
            startActivity(...);
        } else if (key.equalsIgnoreCase("pref_logout")) {
            getLogout();
        }else if (key.equalsIgnoreCase("pref_device_notification")) {
            boolean status = cbpGCM.isChecked();
            switchGCM(status);
        } else if (key.equalsIgnoreCase("pref_mail_notification")) {
            boolean status = cbpMail.isChecked();
            switchMail(status);
        }

        return false;
    }
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#" >

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_margin="10dp"
        android:background="#"
        android:orientation="vertical" >

        <fragment
            android:id="@+id/pref_frag_id"
            android:name="com.xxx.yyy.GenericPreferenceFragment"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent" />
    </LinearLayout>

 </LinearLayout>
public class GenericPreferenceFragment extends PreferenceFragment {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.preferences);

    }
}
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="#" >

    <PreferenceCategory
        android:key="pref_keyword_settings"
        android:title="@string/label_keyword_settings" >
        <Preference
            android:dependency="pref_keyword_settings"
            android:icon="@drawable/ic_keyword_settings"
            android:key="pref_keyword"
            android:summary="@string/description_keyword_preference"
            android:title="@string/title_keyword_preference" />
    </PreferenceCategory>


    <PreferenceCategory
        android:key="pref_notification_settings"
        android:title="@string/label_notification_settings" >
        <CheckBoxPreference
            android:defaultValue="true"
            android:icon="@drawable/ic_notification_settings"
            android:key="pref_device_notification"
            android:summary="@string/description_device_notification"
            android:title="@string/title_device_notification" />
        <CheckBoxPreference
            android:defaultValue="true"
            android:icon="@drawable/ic_mail_settings"
            android:key="pref_mail_notification"
            android:summary="@string/description_mail_notification"
            android:title="@string/title_mail_notification" />
    </PreferenceCategory>


    <PreferenceCategory
        android:key="pref_logout_settings"
        android:title="@string/label_logout_settings" >
        <Preference
            android:dependency="pref_logout_settings"
            android:icon="@drawable/ic_logout"
            android:key="pref_logout"
            android:enabled="true"
            android:summary="@string/description_logout_preference"
            android:title="@string/title_logout_preference" />
    </PreferenceCategory>

</PreferenceScreen>

经过一些尝试后,我找到了解决方案:我必须从R.xml.preferences中删除
android:dependency=“pref\u关键字\u设置”
android:dependency=“pref\u注销\u设置”
。使用依赖项
Preferences.isEnable()
时,结果总是
false