附加 GestureDetector 的挑战到 ListPreference是 2 倍:
- 获取仅在 preferences.xml 中定义(即未在 Java 代码中实例化)的 ListPreference 的句柄。
- ListPreference 既不是 View 也不是 Activity 的子类。
是否可以附加 GestureDetector到 ListPreference ?
如果是这样,人们会怎么做呢?我应该在哪里编写代码来实例化 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):
通过对 ListView
的引用,您还可以附加一个 OnTouchListener
、GestureDetector
等。您可以从这里开始。
关于android - 如何将 GestureDetector 附加到 ListPreference?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17181083/