微调:当选择的项目是一样的onItemSelected不叫 [英] Spinner : onItemSelected not called when selected item remains the same
本文介绍了微调:当选择的项目是一样的onItemSelected不叫的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个 OnItemSelectedListener
我的微调
,但是当所选择的项目是一样的,因为它不叫在previous之一。显然, OnClickListener
不是一个微调
选项。
我需要赶上每次一个项目一个用户的点击。你知道吗?
也许是事实,这微调
里面的动作条
扰乱了正常的行为?
@覆盖
公共无效onCreateOptionsMenu(功能菜单,MenuInflater充气){
inflater.inflate(R.menu.tracklist_menu,菜单);
微调微调=(微调)menu.findItem(R.id.option_ordering_spinner)
.getActionView();
spinner.setAdapter(mSpinnerAdapter);
spinner.setSelection(prefsHelper.getOrderingSpinnerPos(preFS));
spinner.setOnItemSelectedListener(新OnItemSelectedListener(){
@覆盖
公共无效onItemSelected(适配器视图<>母公司视图中查看,
INT位置,长的id){
字符串str =选择;
的System.out.println(STR);
如果(optionMenuInitialized){
开关(位置){
情况下0:
// RDM
getActivity()
.sendBroadcast(
新的意向(
MyIntentAction.DO_RESHUFFLE_PLAYLIST));
smp.setCurrentTracklistCursorPos(-1);
trackAdapter.notifyDataSetChanged();
打破;
情况1:
// 艺术家
getActivity()
.sendBroadcast(
新的意向(
MyIntentAction.DO_ORDER_PLAYLIST_BY_ARTIST));
smp.setCurrentTracklistCursorPos(-1);
trackAdapter.notifyDataSetChanged();
打破;
案例2:
// 夹
getActivity()
.sendBroadcast(
新的意向(
MyIntentAction.DO_ORDER_PLAYLIST_BY_FOLDER));
smp.setCurrentTracklistCursorPos(-1);
trackAdapter.notifyDataSetChanged();
打破;
}
prefsHelper.setOrderingSpinnerPos(prefEditor,位置);
prefEditor.commit();
}
optionMenuInitialized = TRUE;
}
@覆盖
公共无效onNothingSelected(适配器视图<>母公司){
}
});
}
解决方案
好吧,我终于找到了一个解决方案,通过创建自己的类扩展微调:
公共类MySpinner扩展微调{
OnItemSelectedListener监听;
公共MySpinner(上下文的背景下,ATTRS的AttributeSet){
超(背景下,ATTRS);
}
@覆盖
公共无效setSelection(INT位置){
super.setSelection(位置);
如果(听众!= NULL)
listener.onItemSelected(NULL,NULL,位置,0);
}
公共无效setOnItemSelectedEvenIfUnchangedListener(
OnItemSelectedListener监听器){
this.listener =侦听器;
}
}
I have a OnItemSelectedListener
for my Spinner
, but it is not called when the selected item is the same as the previous one. Apparently the OnClickListener
is not an option for a Spinner
.
I need to catch everytime a user click on an item. Any idea?
Maybe the fact that this Spinner
is inside the ActionBar
disturbs normal behavior?
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.tracklist_menu, menu);
Spinner spinner = (Spinner) menu.findItem(R.id.option_ordering_spinner)
.getActionView();
spinner.setAdapter(mSpinnerAdapter);
spinner.setSelection(PrefsHelper.getOrderingSpinnerPos(prefs));
spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view,
int position, long id) {
String str = "selected";
System.out.println(str);
if (optionMenuInitialized) {
switch (position) {
case 0:
// rdm
getActivity()
.sendBroadcast(
new Intent(
MyIntentAction.DO_RESHUFFLE_PLAYLIST));
smp.setCurrentTracklistCursorPos(-1);
trackAdapter.notifyDataSetChanged();
break;
case 1:
// artist
getActivity()
.sendBroadcast(
new Intent(
MyIntentAction.DO_ORDER_PLAYLIST_BY_ARTIST));
smp.setCurrentTracklistCursorPos(-1);
trackAdapter.notifyDataSetChanged();
break;
case 2:
// folder
getActivity()
.sendBroadcast(
new Intent(
MyIntentAction.DO_ORDER_PLAYLIST_BY_FOLDER));
smp.setCurrentTracklistCursorPos(-1);
trackAdapter.notifyDataSetChanged();
break;
}
PrefsHelper.setOrderingSpinnerPos(prefEditor, position);
prefEditor.commit();
}
optionMenuInitialized = true;
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
}
解决方案
Ok, I finally found a solution, by creating my own class extending Spinner :
public class MySpinner extends Spinner {
OnItemSelectedListener listener;
public MySpinner(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public void setSelection(int position) {
super.setSelection(position);
if (listener != null)
listener.onItemSelected(null, null, position, 0);
}
public void setOnItemSelectedEvenIfUnchangedListener(
OnItemSelectedListener listener) {
this.listener = listener;
}
}
这篇关于微调:当选择的项目是一样的onItemSelected不叫的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文