我有微调器和我的自定义微调器适配器。 在某些原因,微调器(当用户更改项目选择时)不会在我的适配器中触发OnItemSelected并且不调用getView,因此我无法呈现当前选定的项目(旋转器触发内部项目单击并正确设置当前项目)
如果用户打开"软件键盘"微调器工作得很好!它总是刷新微调内容。
如有必要,我可以提供更多信息 有什么建议吗?
public class DictionarySpinnerAdapter implements SpinnerAdapter, OnItemSelectedListener{
public DictionarySpinnerAdapter(BaseActivity ctx, Spinner owner)
{
this.ctx = ctx;
li = (LayoutInflater) ctx.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
Owner = owner;
Owner.setClickable(true);
Owner.setOnItemSelectedListener(this);
}
@Override
public int getCount() {
return (dictionaries == null ) ? 0 : dictionaries.size() + offset ;
}
@Override
public Object getItem(int position) {
if ( position > (offset - 1) )
return dictionaries.get(position - offset);
else
return null;
}
@Override
public long getItemId(int position) {
if ( position > (offset - 1) )
return dictionaries.get(position-offset).GetKey();
else
return -1;
}
@Override
public int getItemViewType(int position) {
return 1;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
//rendering my items...
}
@Override
public boolean hasStableIds() {
return true;
}
@Override
public boolean isEmpty() {
return ( dictionaries != null ) ? false : true;
}
@Override
public View getDropDownView(int position, View convertView, ViewGroup parent) {
//rendering dropdowns
}
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position,
long id) {
SetSelectedItem((int)id);
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
SetSelectedItem(null);
}
public void SetSelectedItem(Integer byKey)
{
if ( byKey == null|| (byKey == -1 && allowNull))
{
selectedPosition = 0;
if ( allowNull)
selectedKey = -1;
else
if (dictionaries!=null&& dictionaries.size()>0)
selectedKey = dictionaries.get(0).GetKey();
if (selectedKey > -1)
firstSelected = true;
handleItemClick(selectedKey);
Owner.setSelection(selectedPosition);
return;
}
for(Dictionary entry : dictionaries )
if ( entry.GetKey() == byKey.intValue() )
{
selectedKey = byKey;
selectedPosition = dictionaries.indexOf(entry) + offset;
handleItemClick(selectedKey);
break;
}
// Log.i("MAH", "setSelectedItem("+selectedPosition+")");
firstSelected = true;
Owner.setSelection(selectedPosition);
}
}
编辑: 经过一些调试我觉得在这段代码(Absspinner.java)中是个问题。
@Override
public void setSelection(int position) {
setNextSelectedPositionInt(position); //works fine
requestLayout(); // ??
invalidate(); // ??
}
EDIT2: Spinner在TableLayout中,如果我将它移到tablelayout外面,它的工作正常。所以我的新问题是:我如何刷新TableLayout中的视图?