这个线程中的答案没有任何帮助。
我有一个要求,I want to do something when user long presses on CheckBoxPreference
.我正在活动内动态创建复选框首选项。我正在使用以下代码段来填充视图:
m_PreferenceScreen = getPreferenceManager().createPreferenceScreen(this);
m_PreferenceCategory = new PreferenceCategory(this);
m_CheckBoxPreference = new CheckBoxPreference[m_Cursor.getCount()];
int i = 0;
while (m_Cursor.moveToNext()) {
//Create checkbox instances here
m_CheckBoxPreference[i].setOnPreferenceChangeListener(this);
m_PreferenceCategory.addPreference(m_CheckBoxPreference[i++]);
}
setPreferenceScreen(m_PreferenceScreen);
我想实现什么?
我在数据库中的条目很少。我想填充一个对应于数据库中每个条目的复选框列表(我可以使用上面的代码做到这一点)。现在我的要求是,当用户长按任何复选框时,它应该做一些事情(比如,打开一个对话框)。
用上面的代码做这件事吗?
我也会感谢任何替代解决方案。 但是,我更愿意采用第一种方法。
我不确定复选框首选项是否有长按组件。 你可能想要评估 UX,以查看是否可以将操作替换为其他 UI 组件。 也许这是一个常规首选项,当单击打开您的详细信息以及可以选中的复选框时。
如果这不符合您的需求,您可以手动创建可以自动加载/更新共享首选项对象的复选框视图。 我相信标准视图复选框具有长按的能力。 这可能是可以采样的东西,因为我从未直接尝试过长时间按下复选框。 如果不能,则可能需要创建一个复选框和一个单独的组件,其中包含要长按的文本。
我设法做到了。下面的技巧对我有用。
ListView listView = getListView();
listView.setOnItemLongClickListener(this);
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
ListView listView = (ListView) parent;
ListAdapter listAdapter = listView.getAdapter();
Object obj = listAdapter.getItem(position);
if (obj != null && obj instanceof View.OnLongClickListener) {
View.OnLongClickListener longListener = (View.OnLongClickListener) obj;
return longListener.onLongClick(view);
}
return false;
}