Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/231.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 setOnClickListener不适用于PreferenceFragment_Android_Android Settings - Fatal编程技术网

Android setOnClickListener不适用于PreferenceFragment

Android setOnClickListener不适用于PreferenceFragment,android,android-settings,Android,Android Settings,我在Android设置菜单中有一个CheckBoxPreference和一个EditTextPreference。我要做的是在单击EditTextPreference时取消选中复选框。除非我尝试添加侦听器,否则一切正常。问题似乎是从一个空的“custFragment”开始的。应用程序只是崩溃了。代码如下: XML 而且 package com.triunedev.foodeze; import android.os.Bundle; import android.preference.Prefe

我在Android设置菜单中有一个
CheckBoxPreference
和一个
EditTextPreference
。我要做的是在单击
EditTextPreference
时取消选中
复选框。除非我尝试添加侦听器,否则一切正常。问题似乎是从一个空的“custFragment”开始的。应用程序只是崩溃了。代码如下:

XML

而且

package com.triunedev.foodeze;

import android.os.Bundle;
import android.preference.PreferenceFragment;

public class SettingsFragment extends PreferenceFragment {

    public SettingsFragment() {
        // Required empty public constructor
    }

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

        // Load the preferences from an XML resource
        addPreferencesFromResource(R.xml.preferences);
    }

}

求你了,我哪里做错了?谢谢

您的
custFragment
为空

您还需要在事务期间将
片段添加到
backstack

将代码替换为:

FragmentManager fm = getFragmentManager();
Fragment fragment = new SettingsFragment();
FragmentTransaction ft = fm.beginTransaction();
ft.replace(android.R.id.content, fragment, "fragTag");
ft.addToBackStack("fragTag");
ft.commit();
fm.executePendingTransactions();
现在使用以下方法重用片段:

custFragment = (SettingsFragment) getFragmentManager().findFragmentByTag("fragTag");
编辑

要解决后退按钮中的问题,请在
设置活动中覆盖
onBackPressed()
,并添加以下代码:

 @Override
public void onBackPressed() {
    if (getFragmentManager.getBackStackEntryCount() > 0)
       getFragmentManager.popBackStackImmediate();
    else super.onBackPressed();
}

这对我来说非常有用,但它似乎会使后退按钮在第一次单击时变为空白屏幕,然后在第二次单击时变为主要活动。有办法解决吗?我试过了,但没用。我也尝试过使用参数,但仍然无法使其发挥作用。如果你就这个问题发布一个新的问题会更好…这样每个人都可以给出建议。。
custFragment = (SettingsFragment) getFragmentManager().findFragmentByTag("fragTag");
 @Override
public void onBackPressed() {
    if (getFragmentManager.getBackStackEntryCount() > 0)
       getFragmentManager.popBackStackImmediate();
    else super.onBackPressed();
}