选择项目后,Android Spinner不会刷新

时间:2014-09-25 14:39:31

标签: android android-spinner

我有微调器和我的自定义微调器适配器。 在某些原因,微调器(当用户更改项目选择时)不会在我的适配器中触发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中的视图?

0 个答案:

没有答案