我有一個PreferenceActivity
我想在其中動態添加首選項。如何添加一個「長按聽衆」的偏好?
在很長的點擊,這些人要做些什麼,但OnPreferenceClickListener
只支持普通點擊,沒有長期的點擊。
是否有實現此功能的方式,我錯過了什麼?
感謝
我有一個PreferenceActivity
我想在其中動態添加首選項。如何添加一個「長按聽衆」的偏好?
在很長的點擊,這些人要做些什麼,但OnPreferenceClickListener
只支持普通點擊,沒有長期的點擊。
是否有實現此功能的方式,我錯過了什麼?
感謝
看看this幫助。
在該鏈接死亡事件,這裏是後該鏈接的主體。注意:我沒有在下面寫任何東西。
內置的優先級有一個方法來獲得點擊,的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並覆蓋綁定到長項單擊監聽器添加到列表視圖,只是這個類是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,這是自動長期點擊調用:
public class BlahBlahPreference extends CheckBoxPreference implements View.OnLongClickListener {
@Override
public boolean onLongClick(View v) {
// Do something for long click
return true;
}
}
當時無法來測試你的,但我想知道,如果你可以通過使用getView()
方法上Preference
實現這一目標。然後,一旦你有這個View
,使用setOnLongClickListener()
。
我用CheckboxPreference試了一下,它有一半工作。首選項是可以長時間點擊的,但複選框變得不可點擊,我無法弄清楚如何解決這個問題。 – 2015-03-18 09:11:28
是的,這工作完美!謝謝=) – Force 2012-01-18 16:53:43
我怎麼知道哪些偏好確實是長時間點擊?你從名單適配器(看onItemLongClick法)獲得 – 2013-04-06 12:55:53
@androiddeveloper產品偏好型的,只是調用信息getKey()方法來獲取密鑰)))) – grine4ka 2013-09-18 14:31:12