android – 如何将GestureDetector附加到ListPreference?

GestureDetector附加到 ListPreference的挑战是双重的:

>获取仅在preferences.xml中定义的ListPreference句柄(即未在Java代码中实例化).
> ListPreference既不是View子类也不是Activity子类.

是否有可能将GestureDetector附加到ListPreference

如果是这样,怎么会这样呢?我会在哪里编写代码来实例化GestureDetector并实现监听器?

解决方法

除非我没有正确地理解问题,否则答案可能比你想象的要简单. ListPreferece的源代码教导它只是一个AlertDialog的包装器,它在ListView中显示它的各种选项.现在,AlertDialog实际上允许您获取它包装的ListView的句柄,这可能就是您所需要的.

在其中一条评论中,您表示,在此阶段,您感兴趣的只是检测列表中任何项目的长按.因此,我只需使用OnItemLongClickListener,而不是通过附加GestureDetector来回答这个问题.

public class ListPreferenceActivity extends PreferenceActivity implements OnPreferenceClickListener {

    private ListPreference mListPreference;

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

        addPreferencesFromresource(R.xml.list_prefs);

        mListPreference = (ListPreference) findPreference("pref_list");
        mListPreference.setonPreferenceClickListener(this);
    }

    @Override
    public boolean onPreferenceClick(Preference preference) {
        AlertDialog dialog = (AlertDialog) mListPreference.getDialog();
        dialog.getListView().setonItemLongClickListener(new AdapterView.OnItemLongClickListener() {
            @Override public boolean onItemLongClick(AdapterView<?> parent,View v,int position,long id) {
                Toast.makeText(getApplicationContext(),"Long click on index " + position + ": " 
                        + parent.getItemAtPosition(position).toString(),Toast.LENGTH_SHORT).show();
                return false;
            }
        });
        return false;
    }

}

结果(在长按显示中吐司):

通过对ListView的引用,您还可以附加一个OnTouchListener,GestureDetector等.由您决定从这里开始.

相关文章

这篇“android轻量级无侵入式管理数据库自动升级组件怎么实现...
今天小编给大家分享一下Android实现自定义圆形进度条的常用方...
这篇文章主要讲解了“Android如何解决字符对齐问题”,文中的...
这篇文章主要介绍“Android岛屿数量算法怎么使用”的相关知识...
本篇内容主要讲解“Android如何开发MQTT协议的模型及通信”,...
本文小编为大家详细介绍“Android数据压缩的方法是什么”,内...