1

线程中的答案没有任何帮助。
我有一个要求在哪里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);    

关于我想要达到的目标?
我在数据库中的条目很少。我想填充与数据库中每个条目相对应的复选框列表(我可以使用上面的代码来完成)。现在我的要求是,当用户长按任何复选框时,它应该做一些事情(比如说,打开一个对话框)。

这件事可以用上面的代码吗?
我也将欣赏任何替代解决方案。但是,我更喜欢第一种方法。

4

2 回答 2

0

我不确定 CheckBoxPreference 是否有长按组件。您可能想要评估您的 UX,看看您是否可以用不同的 UI 组件替换该操作。也许这是一个常规的偏好,当单击打开您的详细信息以及可以选中的复选框时。

如果这不适合您的需要,您可以手动创建可以自动加载/更新共享首选项对象的复选框视图。我相信标准视图复选框可以长按。由于我从未直接尝试过长按复选框,因此可能需要对其进行采样。如果不能,您可能需要创建一个复选框和一个包含要长按的文本的单独组件。

于 2014-02-26T19:33:32.860 回答
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;
}
于 2014-06-13T20:56:27.497 回答