Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/229.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
如何在.java代码中启用禁用的(xml)ListPreference对象?_Java_Android_Xml_Listpreference - Fatal编程技术网

如何在.java代码中启用禁用的(xml)ListPreference对象?

如何在.java代码中启用禁用的(xml)ListPreference对象?,java,android,xml,listpreference,Java,Android,Xml,Listpreference,编辑3 以下是我如何在主活动的onCreate中确定设备是否为平板电脑的方法: public static boolean isTablet(Context ctx){ return (ctx.getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK ) >= Configuration.SCREENLAYOUT_SI

编辑3

以下是我如何在主
活动
onCreate
中确定设备是否为平板电脑的方法:

  public static boolean isTablet(Context ctx){
    return (ctx.getResources().getConfiguration().screenLayout
        & Configuration.SCREENLAYOUT_SIZE_MASK
    )
        >= Configuration.SCREENLAYOUT_SIZE_LARGE;
  }
我不知道这是否是一种黑客行为,也不可靠,但无论如何,我都不知道如何在
片段
(以下)中的
onCreate
中使用它,因为我不知道传递给
上下文

  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    addPreferencesFromResource(R.xml.preferences);Preference p = getPreferenceManager().findPreference("orientation");
    p.setEnabled(isTablet(????????????????));
编辑按要求显示
strings.xml
中定义的数组:

<string-array name="modes">
    <item>0</item>
    <item>1</item>
    <item>2</item>
</string-array>
<string-array name="indices">
    <item>Portrait</item>
    <item>Landscape</item>
    <item>Rotate</item>
</string-array>
我无法制作Android Studio 1.1.0,让我给它一个
id
;但如果有办法的话,我的解决方案就是——我该怎么做

编辑

解决方法:

android:enabled=“true”


非常蹩脚。请帮忙

看起来您可以使用PreferenceManager并根据
键获取首选项。
请参阅文档和

您可以使用该方法确定它是否是平板电脑

然后,它就像获得偏好一样简单,如果是平板电脑就启用它

编辑:

为了使用您的方法并为其提供有效的
上下文
,您可以这样做。请注意,我使用了为
isTablet()
方法发布的代码的修改版本:

 public class SettingsFragment extends PreferenceFragment implements OnSharedPreferenceChangeListener {
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            addPreferencesFromResource(R.xml.preferences);

            Preference p = getPreferenceManager().findPreference("orientation");
            p.setEnabled(isTablet(getActivity()));
        }

        private boolean isTablet(Context context) {
            int screenLayout = context.getResources().getConfiguration().screenLayout;
            screenLayout &= Configuration.SCREENLAYOUT_SIZE_MASK;

            switch (screenLayout) {
                case Configuration.SCREENLAYOUT_SIZE_SMALL:
                    return false;
                case Configuration.SCREENLAYOUT_SIZE_NORMAL:
                    return false;
                case Configuration.SCREENLAYOUT_SIZE_LARGE:
                    return true;
                case 4: // Configuration.SCREENLAYOUT_SIZE_XLARGE is API >= 9
                    return true;
                default:
                    return false;
            }
        }
        //...................

多亏了丹尼尔·纽金特令人难以置信的慷慨,以下是最终奏效的方法

preferences.xml
(不启用或禁用方向):

isTablet.java

public class SettingsFragment extends PreferenceFragment implements OnSharedPreferenceChangeListener {

  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    addPreferencesFromResource(R.xml.preferences);
//  next two lines ****************************************************
    Preference p = getPreferenceManager().findPreference("orientation");
    p.setEnabled(isTablet(getActivity()));
//  Let java code enable or disable orientation ***********************
  }

  @Override
  public void onResume() {
    super.onResume();
    getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
  }
  @Override
  public void onPause() {
    super.onPause();
    getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this);
  }
  @Override
  public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
    SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(getActivity());

  }
}
  private boolean isTablet(Context context) {
    int screenLayout = context.getResources().getConfiguration().screenLayout;
    screenLayout &= Configuration.SCREENLAYOUT_SIZE_MASK;

    switch (screenLayout) {
      case Configuration.SCREENLAYOUT_SIZE_SMALL:
        return false;
      case Configuration.SCREENLAYOUT_SIZE_NORMAL:
        return false;
      case Configuration.SCREENLAYOUT_SIZE_LARGE:
        return true;
      case 4: // Configuration.SCREENLAYOUT_SIZE_XLARGE is API >= 9
        return true;
      default:
        return false;
    }
  }

你能发布你的
@array/index
@array/modes
吗?我感觉我做错了……你想只为平板电脑启用此首选项吗?你使用的是这里描述的方法吗@DanielNugent——没有,但是哪种方法?(长链接)如果设备没有足够大的“横向高度”(即宽度)来显示我的整个UI,我想要的是不允许旋转,这对于典型的手机来说是正确的。我使用找到的第一个
isaplate
方法。我在Barnes and Noble,与聊天室的连接刚刚断开。@DSlomer64我刚刚更新了答案,这应该可以用。我使用了一个有人发布的变体,以使
isTablet()
方法更具可读性和可理解性。我根据这个答案修改了代码:我最后的聊天评论是,
void
对于
onCreateView
来说不是有效的返回类型。而在
类中,也会导致错误。你在用安卓工作室吗?1.1.0?如果我将返回类型更改为
查看
,则AS会抱怨
受保护
,并将其更改为
公共
。我觉得很好,但它能带来什么回报呢?不为空
;非
viewGroup
(这导致
非法状态异常:Fragment com.dslomer64.kakurocombosbuildvariants.settings片段未创建视图
)。
    <PreferenceCategory>
        <ListPreference
            android:key="orientation"
            android:title="Orientation (for tablets only)"
            android:summary="Lock in portrait or landscape mode or neither (allow rotation to determine)?"
            android:defaultValue="0"
            android:entries="@array/indices"
            android:entryValues="@array/modes"
            >
        </ListPreference>
    </PreferenceCategory>
</PreferenceScreen>
public class SettingsFragment extends PreferenceFragment implements OnSharedPreferenceChangeListener {

  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    addPreferencesFromResource(R.xml.preferences);
//  next two lines ****************************************************
    Preference p = getPreferenceManager().findPreference("orientation");
    p.setEnabled(isTablet(getActivity()));
//  Let java code enable or disable orientation ***********************
  }

  @Override
  public void onResume() {
    super.onResume();
    getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
  }
  @Override
  public void onPause() {
    super.onPause();
    getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this);
  }
  @Override
  public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
    SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(getActivity());

  }
}
  private boolean isTablet(Context context) {
    int screenLayout = context.getResources().getConfiguration().screenLayout;
    screenLayout &= Configuration.SCREENLAYOUT_SIZE_MASK;

    switch (screenLayout) {
      case Configuration.SCREENLAYOUT_SIZE_SMALL:
        return false;
      case Configuration.SCREENLAYOUT_SIZE_NORMAL:
        return false;
      case Configuration.SCREENLAYOUT_SIZE_LARGE:
        return true;
      case 4: // Configuration.SCREENLAYOUT_SIZE_XLARGE is API >= 9
        return true;
      default:
        return false;
    }
  }