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 メソッドでスピナーを開かないようにすることでしたが、達成できませんでした。spinnerその後、あらゆる種類の汚い回避策 (非表示/再表示、画面内の別のフィールドへのフォーカス、戻るボタンのシミュレートなど) を試しましたが、何も機能していないようです。

それを達成する方法はありますか?

ありがとう

4

3 に答える 3

1

スピナーのアダプターを無効化/リセットしてみましたか? それは望ましい効果をもたらすかもしれません。

それ以外の場合、あなたが何を達成しようとしているのかを正しく理解していれば、最初にテキストの「アクションボタン」をオプションメニュー項目として簡単に追加して、アカウントの追加画面に導くことができます.

戻ってきてアクティブなアカウントがある場合は、スピナーにアダプターのみを入力するか、オプション メニューを無効にすることができます。

于 2013-07-21T13:15:03.087 に答える
1

SherlockActionバー を使用する

setSlidingActionBarEnabled(true);

スピナーの使用を停止するには:-

setSupportProgressBarIndeterminateVisibility(false);

スピナーを再起動するには:-

setSupportProgressBarIndeterminateVisibility(true);
于 2013-07-17T11:46:42.997 に答える
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 に答える