是否可以向CheckBoxPreference添加长按监听器?

时间:2014-02-26 19:07:43

标签: android listener preferenceactivity checkboxpreference

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);    

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

上面的代码是否可行?是的 我也将感谢任何替代解决方案。但是,我更愿意采用第一种方法。

2 个答案:

答案 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;
}