gpt4 book ai didi

android - 如何将 "long click listener"添加到首选项?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:47:19 30 4
gpt4 key购买 nike

我有一个 PreferenceActivity,我想在其中动态添加首选项。

在长按时,这些应该会做一些事情,但是 OnPreferenceClickListener 只支持普通点击,不支持长按。

有没有办法实现这个功能,我是不是错过了什么?

谢谢

最佳答案

如果链接失效,这里是该链接的帖子主体。注意:我没有在下面创作任何东西。

内置的Preference类有接收点击的方法onClick,但是没有接收长点击的方法。在我现在的项目中,其实是有这个需求的,并且找到了实现的方法。

PreferenceActivity 实际上是一个ListActivity,在后台有一个特殊的适配器。通常的(不长的)点击是通过使用通常的 ListView 机制 setOnItemClickListener 来处理的。设置它的代码在 PreferenceScreen 中:

public final class PreferenceScreen extends PreferenceGroup implements AdapterView.OnItemClickListener.... {
public void bind(ListView listView) {
listView.setOnItemClickListener(this);
listView.setAdapter(getRootAdapter());

onAttachedToActivity();
}

public void onItemClick(AdapterView parent, View view, int position, long id) {
Object item = getRootAdapter().getItem(position);
if (!(item instanceof Preference)) return;

final Preference preference = (Preference) item;
preference.performClick(this);
}
}

将 PreferenceScreen 子类化并覆盖绑定(bind)以将长项单击监听器添加到 ListView 真的很容易,除了此类是最终类。因此,我最终将以下代码添加到我的 PreferenceActivity 子类中:

public class BlahBlahActivity extends PreferenceActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

addPreferencesFromResource(R.xml.account_options_prefs);

ListView listView = getListView();
listView.setOnItemLongClickListener(new OnItemLongClickListener() {
@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;
}
});
}
}

现在我可以有一个实现 View.OnLongClickListener 的 Preference 子类,它会在长按时自动调用:

public class BlahBlahPreference extends CheckBoxPreference implements View.OnLongClickListener {
@Override
public boolean onLongClick(View v) {
// Do something for long click
return true;
}
}

关于android - 如何将 "long click listener"添加到首选项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8912388/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com