0

Nexus 7 タブレットでアプリケーションを実行しているときに、nexus 4 でも他のデバイスで動作するときに問題が発生します。

JSON応答からの要素が入力されたスピナーを配置しようとしました(Asynctaskを介してサーバーからこの応答を取得します)が、Nexus 7を除いてすべてがうまく機能します。管理者アカウントにアクセスできないため、Nexus 7 でアプリをデバッグできません。Nexus 4で同じ問題をデバッグしているときに、同じコードがGalaxy S2で機能し、メニュー項目を次のように変更した後、アクションバーのスピナーがfindById()メソッドによって見つからないことがわかりました。

<item
    android:id="@+id/menuCategory"
    android:actionLayout="@layout/action_categories"
    android:actionViewClass="android.widget.Spinner"
    android:showAsAction="always"
    android:title="@string/collection"/>

<?xml version="1.0" encoding="utf-8"?>
<Spinner xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/menuCategorySpinner"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >

Nexus 4で作業を開始しましたが、Nexus 7ではまだ壊れています。コードの関連部分は次のとおりです。

//First do this to initialise elements of the menu
invalidateOptionsMenu();
//Find the spinner by id
spinner = (Spinner) findViewById(R.id.menuCategorySpinner);
//Initilise adapter
final ArrayAdapter<Category> Adapter = new ArrayAdapter<Category>(this, android.R.layout.simple_dropdown_item_1line, result);
//Set adapter
spinner.setAdapter(Adapter);

以前にidで見つからなかった場合、スピナーがnullになる可能性があるため、問題は最後の行にあると思いますが、Nexus 7でのみ見つからない理由がわかりません。何が起こっているのか知っていますか?

4

1 に答える 1

0

私は解決策を見つけたと思いますが、Androidの異なるバージョンのデバイスでこのような不一致があるという事実をまだ嫌っています(Galaxy S2は4.1.2を使用しており、Nexusデバイスは4.2.2です). これを Android プラットフォームのバグとして報告することも検討していますが、バグ レポートとして有効かどうかを確認する必要があります。全体として、必要な人への回答は次のとおりです。 onCreateOptionsMenu に次を追加するだけです。

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.full, menu);
            //getActionView() get a view for the given action
    spinner = (Spinner) menu.findItem(R.id.menuCategory).getActionView();
    return super.onCreateOptionsMenu(menu);
}

getActionView() は非常に論理的な重要な部分ですが、私が得られないのは、他のプラットフォームで spinner = (Spinner) menu.findItem(R.id.menuCategory); である理由です。うまくいくので、誰かがこの質問に出くわし、その部分を説明できる場合はコメントを書いてください

于 2013-06-27T12:02:43.007 に答える