0

私はAndroid用のアプリケーションに取り組んでいます。このために、国を選択してからその国のスポットを選択するアクティビティを作成しています。利用可能なすべての国のリストを含む 1 つのスピナーがあります。今、私がやりたいことは、選択された国を取得し、選択された国で始まるアイテムのために私が持っているスポットのリストをフィルタリングすることです. 次に、選択した国のスポットを別のスピナーに配置する必要があります。わかりやすくするために、国のリストは単なる国のリストであり、スポットのリストは次のようになります。

  • 国 1 - スポット 1

  • 国 1 - スポット 2

  • 国 2 - スポット 1

  • 国 2 - スポット 2

等々。

これは、コードが次のように機能するはずだと私が考えたものです。

  • スピナー 1 から選択した国を取得します。
  • スポットを含む新しい ArrayList を作成します。
  • 2 つ目の空の ArrayList を作成します。
  • スポットを含む ArrayList の各エントリについて、選択した国で始まるかどうかを確認します。
  • その場合は、2 番目の ArrayList に追加します。
  • これがすべて完了したら、2 番目の ArrayList で ArrayAdapter を作成します。
  • この ArrayAdapter をスピナー 2 に設定します。

私は次のコードでこれを達成しようとしました:

public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
    String selectedCountry = parent.getItemAtPosition(pos).toString();
    ArrayList<CharSequence> arraylist = new ArrayList<CharSequence>();
    arraylist.addAll(R.array.spots_array);
    ArrayList<CharSequence> arraylist2 = new ArrayList<CharSequence>();
    for (i=0; i<arraylist.size(); i++) {
        String delimiter = " - ";
        if ((arraylist(i).split(delimiter)).equals(selectedCountry)) {
            arraylist2.add(arraylist(i).string.substring(string.lastIndexOf('-') + 1));
        }

    }
    ArrayAdapter<CharSequence> arrayAdapter2 = ArrayAdapter.createFromResource(this,  arraylist2<CharSequence>, android.R.layout.simple_spinner_item);
    arrayAdapter2.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    spinner2.setAdapter(arrayAdapter2);
    spinner2.setOnItemSelectedListener(this);
}

ただし、いくつかのエラーが発生します。

  • addAll() では、「ArrayList 型のメソッド addAll(int, Collection) は、引数 (int) には適用できません」と表示されます。
  • arraylist には、「メソッド arraylist(int) は、タイプ Configuration に対して未定義です」と書かれています。
  • 文字列(部分文字列内)で、「文字列を解決できません」と表示されます

私はまだAndroidに比較的慣れていないため、これを機能させるのに多くの問題を抱えています。誰でも私を助けてもらえますか?

4

2 に答える 2

3

あなたのコードには多くの小さな間違いがあります:

  • メソッドをarraylist使用して要素にアクセスするにはget(position)
  • 「spot_array」を追加すると、実際には配列自体ではなく、リソースの ID が追加されます (こちらを参照)

これが更新されたコードです。動作するか、微調整が必​​要な場合があります

public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
        String selectedCountry = parent.getItemAtPosition(pos).toString();
        List<CharSequence> arraylist = new ArrayList<CharSequence>();
        arraylist.addAll(Arrays.asList(getResources().getTextArray(R.array.spots_array)));
        List<CharSequence> arraylist2 = new ArrayList<CharSequence>();
        String delimiter = " - ";
        for (int i=0; i<arraylist.size(); i++) {
            String country = arraylist.get(i).toString();
            if (country.contains(selectedCountry)) {
                arraylist2.add(country.substring(country.lastIndexOf('-') + 2));
            }

        }
        ArrayAdapter<CharSequence> arrayAdapter2 = ArrayAdapter.createFromResource(this,  android.R.id.text1, android.R.layout.simple_spinner_item);
        arrayAdapter2.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spinner2.setAdapter(arrayAdapter2);
        spinner2.setOnItemSelectedListener(this);
    }
于 2012-09-08T20:27:50.110 に答える
0

コードにいくつかのエラーがあります。

まず、addAllArrayListのメソッドは引数としてaを取る必要がありますCollection。Androidの配列IDを渡しR.array.spots_arrayます; AndroidIDは整数であることに注意してください。

Androidリソースから文字列配列をフェッチする通常の方法は、(アクティビティ内で)次のとおりです。

String[] myArray = getResources().getStringArray(R.array.spots_array);

2番目のエラー:直接()ではなくArrayList、メソッドを呼び出して要素にアクセスする必要があります。のようなもの。get(position)arraylist(position)arraylist.get(position)

3番目のエラー:

arraylist2.add(arraylist(i).string.substring(string.lastIndexOf('-') + 1));

単にarraylist2.add(arraylist.get(i));1つのリスト要素を別の要素に追加するためのものである必要があります。

詳細についてArrayListsは、こちらをご覧ください

于 2012-09-08T20:28:05.983 に答える