我需要一些有关sherlock列表导航的帮助。 目标:当您打开导航时,我希望滚动到顶部/焦点到第一行,因此第一项始终可见。 问题:现在当列表中有更多项目时,屏幕可以显示(通常是横向模式),当我选择第4项然后打开列表时,第一项是不可见的,它集中于最后选择的项目。 它适用于我自定义微调器中的代码,但是当我尝试在IcsSpinner中覆盖相同的方法时它没有用。
代码:
/**
* Cusrom微调器类 - 打开时始终专注于第一项 * * / class CustomSpinnerSelection扩展Spinner {
private boolean mToggleFlag = true;
//some constructors here
@Override
public int getSelectedItemPosition() {
// this toggle is required because this method will get called in other
// places too, the most important being called for the
// OnItemSelectedListener
if (!mToggleFlag) {
return 0; // get us to the first element
}
return super.getSelectedItemPosition();
}
@Override
public boolean performClick() {
// this method shows the list of elements from which to select one.
// we have to make the getSelectedItemPosition to return 0 so you can
// fool the Spinner and let it think that the selected item is the first
// element
mToggleFlag = false;
boolean result = super.performClick();
mToggleFlag = true;
return result;
}
}
答案 0 :(得分:1)
有一种可能的方法,现在您已经使用微调器完成了它。
您可以对操作栏使用自定义视图,其中包含用于列表导航的微调器,并使用自定义微调器类而不是默认微调器。
自定义视图xml可能如下所示:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<Spinner
android:id="@+id/actionBarSpinner"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:entries="@array/default_list" />
</LinearLayout>
您需要从代码中启用和设置自定义视图。
View view = this.getLayoutInflater ().inflate (R.layout.actionbar_customview, null);
actionBar.setCustomView (view);
actionBar.setDisplayShowCustomEnabled (true);
此外,您可以保存微调器以设置任何侦听器或执行任何其他操作。
Spinner actionBarSpinner = ((Spinner) view.findViewById (R.id.actionBarSpinner));
而不是Spinner,它将是您的CustomSpinner类。
答案 1 :(得分:0)
我不确定这是不是你的情况,但我发现有关旋转器的一件事:有时如果你在onCreate()上填充它们,会发生一些低级别的棘手问题。请记住,Android是基于事件的,因此将数据放入onCreate实际上可能不会填充微调器。在绘制屏幕后,微调器有时会被填满!
所以,如果发生这种情况,请尝试在onCreate之后进行调用,例如onWindowFocused或其他任何名称
答案 2 :(得分:0)
setSelection可能是加载第一个项目聚焦的微调器的唯一方法。试试这个:
Spinner s = (Spinner) findViewById(R.id.spinner_id);
int i = adapter.getPosition("blue");
s.setSelection(i);