android - 如何将 GestureDetector 附加到 ListPreference?

标签 android listpreference gesturedetector

附加 GestureDetector 的挑战到 ListPreference是 2 倍:

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

是否可以附加 GestureDetectorListPreference

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

最佳答案

除非我没有完全正确地捕获问题,否则答案可能比您想象的要简单。 ListPreferece 的源代码告诉我们,它只不过是 AlertDialog 的包装器,它在 ListView 中显示其各种选项。现在,AlertDialog 实际上允许您获取它包装的 ListView 的句柄,这可能就是您所需要的。

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

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;
    }

}

结果(长按显示的toast):

enter image description here

通过对 ListView 的引用,您还可以附加一个 OnTouchListenerGestureDetector 等。您可以从这里开始。

关于android - 如何将 GestureDetector 附加到 ListPreference?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17181083/

相关文章:

android - Admob 不断返回 AdRequest.ERROR_CODE_NO_FILL?

android - listPreference 中的自定义行?

Android ListPreference 返回错误值

android - 在类中处理 AsyncTask

android - 从android数据目录访问文件

android - Retrofit2 GET批注动态网址

Android - 我的 ListPreference 中的自定义行布局

java - Android Gestures 代码解释

android - ScaleGestureDetector.OnScaleGestureListener.onScaleEnd() 方法没有被击中