【问题标题】:android EditText in preference screen首选项屏幕中的 android EditText
【发布时间】:2011-08-21 11:10:50
【问题描述】:

我可以将 EditText 元素放在首选项屏幕中吗?

我想这样做以允许通过键入快速搜索大型 ListPreference,但不想保存搜索框的内容?这可能吗,或者首选项屏幕上不允许标准布局控件。

目标是提供一种选择时区并将其保存为首选项的方法。仅使用 ListViewPrefernce 是不够的,因为必须滚动大量的时区。因此,我想提供一种“超搜索”类型的输入框,用户可以在其中输入时区或时区的一部分来缩小列表框的选择范围。

【问题讨论】:

标签: android preferences


【解决方案1】:

你可以做的只是创建一个标准的 Preference,它将显示一个包含 EditText 的对话框,并添加一个 ontextchangelistener:

searchET.addTextChangedListener(new TextWatcher() {

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            // TODO Auto-generated method stub              
        }

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count,
                int after) {
            // TODO Auto-generated method stub              
        }

        @Override
        public void afterTextChanged(Editable s) {
            // TODO Auto-generated method stub
        }
    });

至于显示搜索结果,我不知道。我以前从未专门尝试过任何这些,但它似乎对你有用,你必须弄清楚执行搜索本身需要什么代码,但这会添加初始功能。

编辑: 按照标准偏好,我的意思是在 XML 中:

<Preference
    android:title="Time Zone"
    android:summary="Choose your time zone"
    android:key="timeZone"/>

并在您的 PreferenceActivity 中添加以下内容:

Preference timeZone = (Preference)findPreference("timeZone");
     timeZone.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {

            @Override
            public boolean onPreferenceClick(Preference arg0) {
                showDialog(1);
                return false;
            }
        });



@Override
    protected Dialog onCreateDialog(int id) {

    switch (id) {       

    case 1: 
        final EditText searchET = new EditText(this);
//do the searchET.addTextChangedListener here
                 return new AlertDialog.Builder(this)
.setTitle("Choose Time Zone")
.setView(showAppString)
.setPositiveButton(new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface arg0, int arg1) {
    //save the time zone to sharedPreferences
SharedPreferences pref = PreferenceManager.getDefaultSharedPreference(this);
SharedPreferences.Editor editor = pref.edit();
editor.putString("TIME_ZONE", TZ.toString());

}//closes the onClick
})//closes the onclicklistener
.show();
}//closes the switch

}//closes the oncreatedialog

不过,我认为您实际上可以只使用 EditTextPreference,然后将 TextChangedListner 添加到 EditTextPreference,因为我认为它继承了 EditTexts 的所有内容。不过,我并不乐观。

【讨论】:

  • 谢谢。当您说标准偏好时,您的意思只是一个正常的活动/布局,并且自己存储偏好,而不是从 PreferenceActivity 继承。这就是我一直计划做的事情,除非有更好的事情。肯定很多人都有这个问题。
  • @Spacen Jasset - 我编辑了我的答案。或者,当然,你仍然可以按照你说的去做,只做一个带有 EditText 的 Activity。我的解决方案需要打开一个对话框,但我个人觉得这比 EditText 更干净
  • 哦,不,您不能将编辑文本放在偏好屏幕中。抱歉,我并没有在我的回答中真正回答这个问题,我只是给了你一个替代解决方案
猜你喜欢
  • 2014-03-16
  • 2011-07-31
  • 2013-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-13
  • 1970-01-01
相关资源
最近更新 更多