0

タイプArrayList>に依存する2つのスピナーがある場合

 spinner2.setOnItemSelectedListener(new OnItemSelectedListener() {
                    @Override
                    public void onItemSelected(AdapterView<?> adapterView, View view, int position, long id) {
                         ArrayList<HashMap<String, String>> arrList = new ArrayList<HashMap<String,String>>();
                        for (HashMap<String, String> map2 : arrList) {
                            String value = map2.get("SectionID");
                            // Do something

                            Context context = getApplicationContext();

                            int duration = Toast.LENGTH_SHORT;

                            Toast toast = Toast.makeText(context, value, duration);
                            toast.show();
                        Log.d("wwwwwwwwwwwwwwwwwwww: ", value);
                        // Do something
                    }
                    }
                    @Override
                    public void onNothingSelected(AdapterView<?> adapter) {

                    }
                }); 

私はこれが好きですが、コシングが起こり、logcatにエラーがありません

4

2 に答える 2

0

ユーザーがスピナーでアイテムをクリックした後、この配列でタグ (courseid) を持つアイテムを取得する方法がわかりません。

courseid各行からのみ取得する場合は、カスタムの OnItemSelectedListener は必要ありません。簡単な使用:

// Let's use the regular listener     vvvvvvvvvvvvvvvvvvvvvv
spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
    @Override
    public void onItemSelected(AdapterView<?> adapterView, View view, int position, long id) {
        HashMap<String, String> map = arrList.get(position);
        String id = map.get("courseid");
        // Do something
    }

    @Override
    public void onNothingSelected(AdapterView<?> adapter) {}
});

arrListSimpleAdapter のデータを保持するクラス変数はどこにありますか。


私はこれが好きですが、コシングが起こり、logcatにエラーがありません

これは、 を作成したばかりなarrListので、です:

ArrayList<HashMap<String, String>> arrList = new ArrayList<HashMap<String,String>>();
for (HashMap<String, String> map2 : arrList) { // This arrList has no data!

SimpleAdapter を作成したときに使用した ArrayList を使用する必要があります。

new SimpleAdapter(this, arrList, ...);

これは、使用する必要がある ArrayListであり、クラス変数 である必要があります。

于 2012-11-16T19:53:22.720 に答える
0

あなたの投稿は少しわかりにくいですが、私には考えがあると思います。スピナーの各「ラング」の各インデックスに複数のハッシュマップを持つ配列リストによって設定された単一のスピナーがあります。そのため、アイテムが選択されたときに、選択されている単一のキーを取得して、それを使用して何かを実行する必要があります。ご存知のように、 ahashMapは実際にはインデックス化されていないため、別の方法を使用してそれを取得する必要がありますよね?

        ArrayList<HashMap<String, String>> arrList = new ArrayList<HashMap<String,String>>();

        spinner.setOnItemSelectedListener(new CustomOnItemSelectedListener() {

            @Override
            public void onItemSelected(AdapterView<?> adapterView, View view,
                    int position, long id) {

                // for each key in the hashMap at this position..
                for (String key : arrList.get(position).keySet()) {
                    if (key == "Calculus") {
//                      do something
                    } else if (key == "Physics") {
//                      do something else
                    }
                }                                       
            }

ここでの考え方は実にシンプルです。スピナーで選択された位置のインデックスで hashMap の keySet 全体を取得し、その内容に応じて、その中の各キーに対して何かを行います。そこにキーと値のペアが 1 つしかないと仮定すると、これはあまり手間をかけずに機能するはずです。

しかし、デザインを少し再考する必要があると言わざるを得ません。それぞれ 1 つのものを保持するだけの複数の hashMap コンテナーがあります。本当に資源の無駄です。このデータがどのように使用されているか正確にはわからないため、代替案を推奨することは困難ですが、Java でオブジェクトを作成するのは無料ではないことを知っておく必要があります。

于 2012-11-16T20:30:54.787 に答える