2

シャーロック リストのナビゲーションについて助けが必要です。目標: ナビゲーションを開いたときに、最初の行にスクロール/フォーカスして、最初の項目が常に表示されるようにします。問題: 画面に表示できるよりも多くのアイテムがリストにある場合 (通常はランドスケープ モード)、4 番目のアイテムを選択してリストを開くと、最初のアイテムが表示されず、最後に選択したアイテムにフォーカスされます。カスタムスピナーで次のコードを使用すると機能しますが、IcsSpinnerで同じメソッドをオーバーライドしようとしても機能しませんでした。

コード:

/**

* Cusrom スピナー クラス - 開いているときは常に最初のアイテムにフォーカス * */ class CustomSpinnerSelection extends 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;
}

}

4

3 に答える 3

1

スピナーでそれを行ったので、これを行う方法が 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 クラスになります。

于 2012-10-19T09:03:49.210 に答える
0

これがあなたのケースかどうかはわかりませんが、スピナーについてわかったことの 1 つは、onCreate() にスピナーを設定すると、低レベルのトリッキーが発生する場合があることです。Android はイベントベースであるため、データを onCreate に配置しても、実際にはスピナーがいっぱいにならない可能性があることに注意してください。画面が描画された後、スピナーがいっぱいになることがあります。

したがって、これが発生している場合は、 onCreate の後に onWindowFocused などの呼び出しで実行してみてください。

于 2012-10-16T12:53:50.250 に答える
0

setSelection は、最初の項目がフォーカスされた状態でスピナーをロードする唯一の方法かもしれません。これを試して:

Spinner s = (Spinner) findViewById(R.id.spinner_id);
int i = adapter.getPosition("blue");
s.setSelection(i);
于 2012-10-17T16:58:57.900 に答える