gpt4 book ai didi

android - 以编程方式关闭 ActionBar Spinner 或避免打开它

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:02:58 24 4
gpt4 key购买 nike

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

到目前为止一切顺利。

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

@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 方法中打开微调器,但未能实现。然后我尝试了各种肮脏的解决方法(使 spinner 消失/重新出现,专注于屏幕中的另一个字段,模拟后退按钮......),但似乎没有任何效果。

你知道如何实现吗?

谢谢

最佳答案

为什么不使用 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);
}
}

关于android - 以编程方式关闭 ActionBar Spinner 或避免打开它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17577730/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com