看看
this是否有帮助.
如果链接死亡,这里是该链接的帖子的主体.注意:我没有在下面创作任何内容.
内置的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以将长项单击侦听器添加到列表视图将非常容易,除非此类是final.因此,我最终将以下代码添加到我的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;
}
}