除非我没有完全正确地理解这个问题,否则答案可能比你想象的要简单。的源代码ListPreferece
告诉我们,它只不过是一个包装器,AlertDialog
它在 中显示其各种选项ListView
。现在,AlertDialog
实际上允许您处理ListView
它的包装,这可能就是您所需要的。
在您指出的其中一条评论中,在此阶段,您感兴趣的只是检测对列表中任何项目的长按。GestureDetector
因此,我不会通过附加 a 来回答这个问题,而是简单地使用一个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;
}
}
结果(长按显示的吐司):
参考ListView
,您还可以附加一个OnTouchListener
等GestureDetector
。您可以从这里开始。