thread中的答案无论如何都没有帮助
我有I want to do something when user long presses on CheckBoxPreference
的要求。我正在动态创建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);
关于我想要实现的目标?
我在数据库中的条目很少。我想填充一个与数据库中每个条目对应的复选框列表(我可以用上面的代码完成)。现在我的要求是,当用户长按任何复选框时,它应该执行某些操作(比如说,打开一个对话框)。
上面的代码是否可行?是的 我也将感谢任何替代解决方案。但是,我更愿意采用第一种方法。
答案 0 :(得分:0)
我不确定CheckBoxPreference是否有长按组件。您可能希望评估您的UX,以查看是否可以使用其他UI组件替换该操作。也许这是一个常规的偏好,当点击打开你的详细信息以及一个可以检查的复选框。
如果这不符合您的需求,您可以手动创建可自动加载/更新共享首选项对象的复选框视图。我相信标准视图复选框可以长按。它可能是一个可以抽样的东西,因为我从来没有直接尝试过长按复选框。如果你不能,你可能需要创建一个复选框和一个单独的组件,其中包含要长按的文本。
答案 1 :(得分:0)
我设法做到了这一点。以下技巧对我有用。
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;
}