4

我正在尝试使用微调器在ActionBar我的应用程序中提供帐户上下文。在列表的最后位置还有一个“添加帐户”元素。我在用着ABS和配置微调器外观.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);

到目前为止,一切都很好。

用户第一次启动应用程序时,这spinner将是空的,唯一的选择是“添加帐户”,这也是在微调器当前选择中可见的文本。我想要实现的是在用户单击spinner(不是在打开的列表中,而是在微调器本身)时将用户重定向到新的帐户活动。在我的适配器中,我可以检测到它并像这样打开屏幕:

@Override
public View getDropDownView(int position, View convertView, ViewGroup parent) {
    if (convertView == null) {
        ...
    }

    if (parent.getClass() == Spinner.class && ((Spinner) parent).getCount() == 1) { //"Hack" for initial click on "Add Account" in the spinner when it's empty
        Intent intent = new Intent(context, AccountPreferenceActivity.class);
        ((HomeActivity) context).startActivityForResult(intent, HomeActivity.ACTIVITY_PREFERENCE_ACCOUNT);
    }

    ...

    return convertView;
}

我的问题是,在填写新表单并返回主屏幕后,微调器将打开,这是一种丑陋的用户体验。

我的第一次尝试是避免在 getDropDownView 方法中打开微调器,但未能实现。然后我尝试了各种肮脏的解决方法(makespinner消失/重新出现,关注屏幕中的另一个字段,模拟后退按钮......),但似乎没有任何效果。

你知道如何实现吗?

谢谢

4

3 回答 3

1

为什么你不使用actionbar.setNavigationCallBacks函数?!这是我正在使用的一个例子,也许它有帮助:

Context context = getSupportActionBar().getThemedContext();
ArrayAdapter<CharSequence> list = ArrayAdapter.createFromResource(context, R.array.navigations,
        R.layout.sherlock_spinner_item);
list.setDropDownViewResource(R.layout.sherlock_spinner_dropdown_item);

mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);

mActionBar.setListNavigationCallbacks(list, new OnNavigationListener() {

    @Override
    public boolean onNavigationItemSelected(int itemPosition, long itemId) {

    if (itemPosition == 0) {


    } else if (itemPosition == 1) {
        Intent intent = new Intent(MainActivity.this, SomeActivity.class);
        startActivity(intent);

    }

    return true;
    }
});

然后在您的string.xml中定义要在导航列表中显示的元素数组

<string-array name="navigations">
        <item>create account</item>
    </string-array>

编辑:

new View()好的,我找到了您的答案,为此,您必须返回getDropDownView(...)

    @Override
public View getDropDownView(int position, View convertView, ViewGroup parent) {

if (! someSharedPreferencedObject.getBoolean("isAlreadyCreated", false)) {
    if (parent.getClass() == Spinner.class && ((Spinner) parent).getCount() == 1) {

    Intent intent = new Intent(mContext, UserSettingActivity.class);
    mContext.startActivity(intent);
    return new View(mContext);
    }
} else {
    return super.getDropDownView(position, convertView, parent);
}
}
于 2013-07-19T14:48:51.233 回答
1

使用Sherlock 操作

setSlidingActionBarEnabled(true);

要停止使用微调器:-

setSupportProgressBarIndeterminateVisibility(false);

要重新启动微调器,请使用:-

setSupportProgressBarIndeterminateVisibility(true);
于 2013-07-17T11:46:42.997 回答
1

您是否尝试过使微调器的适配器无效/重置它?它可能会产生预期的效果。

否则,如果我理解您要正确实现的目标,您可以先轻松地将文本“操作按钮”添加为选项菜单项,以引导至添加帐户屏幕。

在您回来并且有一个活动帐户后,您可以仅使用适配器填充微调器/使选项菜单无效。

于 2013-07-21T13:15:03.087 回答