如何添加英寸长点击收听QUOT;到preference? [英] How to add a "long click listener" to a Preference?

查看:142
本文介绍了如何添加英寸长点击收听QUOT;到preference?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个 preferenceActivity 在这里我想动态添加preferences。

I have an PreferenceActivity where I would like to add Preferences dynamically.

在很长的点击,这些人要做些什么,但在preferenceClickListener 只支持普通的点击,没有长期的点击。

On a long click, these shall do something, however OnPreferenceClickListener only supports normal clicks, no long clicks.

有没有办法来实现这个功能,我错过了什么?

Is there a way to implement this feature, did I miss something?

感谢

推荐答案

看看的这个帮助。

在该链接死亡的事件,这里是后在该链路的主体。注:我没有创作低于任何

内置的preference类有一个方法来获得点击,的onClick,但都没法接受长期的点击。在我目前的项目,我确实有需要这一点,并找到一种方法来实现它。

The built-in Preference class has a method to receive clicks, onClick, but no method to receive long clicks. In my current project, I actually have a need for this, and found a way to implement it.

preferenceActivity实际上是一个ListActivity,与幕后的一个特殊的适配器。通常的(不长),点击即通过使用通常的ListView机制,setOnItemClickListener处理。在code设置这是preferenceScreen:

PreferenceActivity is actually a ListActivity, with a special adapter behind the scenes. The usual (not long) clicks are processed by using the usual ListView mechanism, setOnItemClickListener. The code to set this up is in PreferenceScreen:

01  public final class PreferenceScreen extends PreferenceGroup implements AdapterView.OnItemClickListener.... {
02   
03      public void bind(ListView listView) {
04          listView.setOnItemClickListener(this);
05          listView.setAdapter(getRootAdapter());
06           
07          onAttachedToActivity();
08      }
09   
10      public void onItemClick(AdapterView parent, View view, int position, long id) {
11          Object item = getRootAdapter().getItem(position);
12          if (!(item instanceof Preference)) return;
13           
14          final Preference preference = (Preference) item;
15          preference.performClick(this);
16      }
17  }

这将是很容易的子类preferenceScreen并覆盖绑定到一个长期的项目,点击监听器添加到列表视图,但这个类是final。正因为如此,我最终加入以下code到我的preferenceActivity子类:

It would be really easy to subclass PreferenceScreen and override bind to add a long-item-click listener to the list view, except this class is final. Because of this, I ended up adding the following code into my PreferenceActivity subclass:

01  public class BlahBlahActivity extends PreferenceActivity {
02      @Override
03      protected void onCreate(Bundle savedInstanceState) {
04   
05          super.onCreate(savedInstanceState);
06   
07          addPreferencesFromResource(R.xml.account_options_prefs);
08   
09          ListView listView = getListView();
10          listView.setOnItemLongClickListener(new OnItemLongClickListener() {
11              @Override
12              public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
13                  ListView listView = (ListView) parent;
14                  ListAdapter listAdapter = listView.getAdapter();
15                  Object obj = listAdapter.getItem(position);
16                  if (obj != null && obj instanceof View.OnLongClickListener) {
17                      View.OnLongClickListener longListener = (View.OnLongClickListener) obj;
18                      return longListener.onLongClick(view);
19                  }
20                  return false;
21              }
22          });
23      }
24  }

现在我可以有一个preference子类,实现View.OnLongClickListener,这是自动长期点击调用:

Now I can have a Preference subclass that implements View.OnLongClickListener, which is automatically invoked for long clicks:

1   public class BlahBlahPreference extends CheckBoxPreference implements View.OnLongClickListener {
2    
3       @Override
4       public boolean onLongClick(View v) {
5           // Do something for long click
6           return true;
7       }
8   }

这篇关于如何添加英寸长点击收听QUOT;到preference?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆