0

ターゲット市場の大部分でデバイスにメニュー ボタンがなくなったため、API 8+ アプリを更新しています。

私の解決策が機能していません。

だから、私はActionBarSherlockを使っています。

必要なボタンを Sherlock メニューに移動しましたが、問題なく動作します。

しかし、私が変更しているアクティビティには、返されたデータを変更するスピナーがありました。スピナーを Sherlock メニューに追加しようとしています (表示されます) が、クリックをキャプチャできません。

これがスクリーンショットです。一番上のスピナーは新しいものです。紫色のブロック内のすべてが比較対象です。

ここに画像の説明を入力

これは私が使用しているコードで、メニューを設定してクリックをキャプチャします。

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {

    menu.add(0, 1, 1, "Add Sleep Record").setIcon(R.drawable.btn_add)
    .setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);

    menu.add(0, 2, 2, "Create Report").setIcon(R.drawable.ic_listview_pdf)
    .setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);


    Spinner spinner = new Spinner(getSherlockActivity().getSupportActionBar()
            .getThemedContext());
    ArrayAdapter<String> spinnerArrayAdapter = new ArrayAdapter<String>(getSherlockActivity()
            .getSupportActionBar().getThemedContext(), R.layout.sherlock_spinner_item,
            new String[]{"Last 7 days", "Last month", "Last 6 months", "Last year"});
    spinnerArrayAdapter.setDropDownViewResource(R.layout.sherlock_spinner_dropdown_item);
    spinner.setAdapter(spinnerArrayAdapter);

    menu.add(0, 3, 3, "Date Range")
    .setActionView(spinner).setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
}

public boolean onOptionsItemSelected(MenuItem item) {
    // Handle item selection
    switch (item.getItemId()) {
    case 1:
        Intent i=new Intent(getActivity(), SleepRecordAddActivity.class);
        startActivity(i);
        return true;
    case 2:
        tryCreateReport();
        return true;
    case 3:
        String boop ="I am here";

        String x= boop;
        return true;
    }
    return false;

}

Spinner ID を 3 に設定しましたが、onOptionsItemSelected のスイッチが 3 でトリガーされることはありません。

この「アクティビティ」は、SherlockFragmentActivity から拡張された SherlockFragment です。

4

2 に答える 2

0

うーん、onOptionsItemSelected にまったくアクセスしていないことがわかりました。いつものように OnItemSelectedListener を追加するだけです。

Spinner spinner = new Spinner(getSherlockActivity().getSupportActionBar()
            .getThemedContext());
    ArrayAdapter<String> spinnerArrayAdapter = new ArrayAdapter<String>(getSherlockActivity()
            .getSupportActionBar().getThemedContext(), R.layout.sherlock_spinner_dropdown_item,
            new String[]{"Last 7 days", "Last month", "Last 6 months", "Last year"});
    spinnerArrayAdapter.setDropDownViewResource(R.layout.sherlock_spinner_dropdown_item);
    spinner.setAdapter(spinnerArrayAdapter);
    spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
            switch (position) {
                    //do stuff
                }
        }
        @Override
        public void onNothingSelected(AdapterView<?> parent) {
            //do stuff                
        }

    });

    menu.add(0, 3, 3, "Date Range")
    .setActionView(spinner).setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
于 2013-04-27T19:54:01.277 に答える
0

現在メソッドを記述しているクラスではなく、アクションバーで ArrayAdapter コンテキストをポイントしています。

ArrayAdapter<String> spinnerArrayAdapter = new ArrayAdapter<String>(getSherlockActivity()
        .getSupportActionBar().getThemedContext(), R.layout.sherlock_spinner_item,
        new String[]{"Last 7 days", "Last month", "Last 6 months", "Last year"});

最初の引数はおそらくthis代わりになるはずです。つまり、この上のスピナーは、おそらくアクションバーでコンテキストを指したままにする必要があります。

この特定の回答は、質問がそうでない場合でも比較するのに関連しています

于 2013-04-26T22:47:45.857 に答える