我正在尝试使用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方法中打开微调器,但是我没能实现它。然后我尝试了各种肮脏的解决方法(make spinner
消失/重新出现,专注于屏幕中的另一个字段,模拟后退按钮......),但似乎没有任何效果。
你知道如何实现这个目标吗?
由于
答案 0 :(得分:1)
使用 SherlockAction 栏
setSlidingActionBarEnabled(true);
停止使用微调器: -
setSupportProgressBarIndeterminateVisibility(false);
要重新启动Spinner使用: -
setSupportProgressBarIndeterminateVisibility(true);
答案 1 :(得分: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);
}
}
答案 2 :(得分:1)
您是否尝试使微调器的适配器无效/重置它?它可能会产生预期的效果。
否则,如果我理解了您要正确实现的目标,您可以先在文本“操作按钮”中轻松添加选项菜单项,然后再进入添加帐户屏幕。
在您回来并且有一个活动帐户后,您可以使用适配器填充微调器/使选项菜单无效。