0

リソース ファイル String.xml 内の文字列配列からスピナーを初期化する方法を理解しています。ただし、私の問題は常に、ドロップダウンメニューから何かを選択したときに適切にリンクする方法です。たとえば、文字列配列がそのように見えるとしましょう

電気 ガス その他

したがって、onItemSelected リスナーで、特定のアクションを実行するためにクリックされたものを知りたい場合は、pos を確認してそれに基づいて行動する必要があります (以下のように文字列配列内の位置がわかっている場合)

public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
        switch(pos){
            case 1: // Electricity

            break;
            case 2: //Gas

            break;
                    .
                    .
                    .
        }       
    }

または、次のようなスティング比較を行う必要があります。

public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
        if(parent.getSelectedItemAtPos(pos).toString().equal("Electricity"){

            } else if (......){
            }
            .
        .
    }

最初の利点はクリーンであることですが、問題は、リソース ファイルを変更するときに常にインデックスの更新を追跡する必要があることです。2 番目の方が安全ですが、文字列の比較を行うのは「冗長」なようです。

私はそうではありません。おそらく、最適な解決策が欠けているか、上記で提案したことは単に問題ありませんか?

専門家を助けてください。アプリに多くのスピナーがあるので、最初から正しいことをしたいと思います:(

ありがとう

4

4 に答える 4

1

これらの2つの間で、間違いなく最初のオプション。1つは、switchステートメントであるため、右ハンドルに瞬時にジャンプします。2つ目は、目的のハンドルに到達するまで、線形の比較行があります。次に、2番目に文字列比較を使用しています。これは、整数比較を行うよりも遅く、安全性が低くなります。大きく変更する予定がある場合はもう少し手間がかかりますが、個人的にはこの2つのうちの方が良い方法だと思います。

于 2013-01-29T06:00:04.917 に答える
1

2番目は問題ありませんが、少し強化されています。ローカル文字列変数を宣言し、 の選択されたアイテムを格納しますSpinner

public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {

        String selectedItem = parent.getSelectedItemAtPos(pos).toString();

        if(selectedItem.equals("Electricity")) {

        } else if (selectedItem.equals("Dummy")){
            // ....    
        }

}
于 2013-01-29T05:55:56.520 に答える
1

リソース ファイルを使用してスピナーにエントリを設定する場合、リソース ファイルで文字列を宣言しているときに、最初のアプローチがより適切な原因になります。どの文字列がどのインデックスにあるかを知ることができます。

android:entries="@array/..."

ただし、アダプタを使用してエントリを設定している場合(サーバーまたは他の場所から受信している場合)、2番目のアプローチを使用することをお勧めします。その場合、文字列のインデックス作成は不確実になります。

mSpinner.setAdapter(...)

于 2013-01-29T06:03:09.967 に答える
1

どちらの方法でも問題ないと思います。どちらを選択する必要があるかによって異なります

あなたが言ったように、最初のものは、数が増えても読みやすさを向上させますcases

しかし、2番目のアプローチのように、チェックする条件が1〜2つしかない場合、条件が増えるとコードが乱雑に見える可能性があります

読みやすさを重視する場合は、最初のアプローチを使用するか、必要に応じて選択できます

:両方のアプローチのパフォーマンスを比較している場合、それらの間に大きな違いはないと思います(次のリンク{ link1link2 }を参照)

于 2013-01-29T05:50:28.570 に答える