2012-09-08 74 views
0

我正在開發Android應用程序。爲此,我正在製作一項活動,讓您選擇您的國家,然後選擇該國家的一個地點。我有一個包含所有可用國家列表的微調器。現在,我想要做的是獲取已選擇的國家,然後篩選我已經選擇的國家/地區的項目列表。然後它應該把選定國家的景點變成一個不同的微調。只是爲了清楚起見,國家的名單只是一個國家的名單,和斑點的名單看起來像:使用數組中的特定條目填充微調器

  • 國家1 - Spot1

  • 國家1 - Spot2

  • COUNTRY2 - Spot1

  • COUNTRY2 - Spot2

依此類推。

這是我認爲的代碼應該像:

  • 獲取選定的國家從1微調
  • 使含有斑點一個新的ArrayList。
  • 製作第二個空的ArrayList。
  • 對於包含斑點的ArrayList的每個條目,檢查它是否從所選國家開始。
  • 如果是這樣,請將其添加到第二個ArrayList。
  • 完成這一切後,使用第二個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)是未定義的類型配置」
  • 在字符串(內子),它說:「字符串不能得到解決」

我還是比較新的Android和我很難解決這個問題。任何人都可以幫助我嗎?

回答

3

有很多的代碼中的小錯誤:

  • 要訪問的元素在arraylist使用get(position)方法
  • 當你把你的「spot_array」,實際上添加的標識資源,而不是數組本身(見here

這裏是你的代碼更新,它應該工作,或者可能需要一些調整

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); 
    } 
+1

只是一個小小的更正。 'country.lastIndexOf(' - ')+ 1'應該是'country.lastIndexOf(' - ')+ 2',否則它將在' - '之後包含空格。 – sandyiscool

+0

是的,對!說實話,我沒有真正測試代碼。 – florianmski

+0

感謝您的回覆,您真的幫了大忙!它現在有效! – Zero

0

你的代碼有幾個錯誤。

首先,ArrayList的方法addAll必須作爲參數a Collection。您傳遞的是Android陣列ID R.array.spots_array;請記住,Android ID是整數。

的通常方法從Android資源取一個字符串數組是(一個活動內側):

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

第二錯誤:你應該通過調用方法get(position),不直接訪問ArrayList元件(arraylist(position) )。像arraylist.get(position)

第三個錯誤:

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

應該簡單地arraylist2.add(arraylist.get(i));添加一個列表元素到另一個。

更多關於ArrayLists可以找到here

+0

頁腳不允許在這裏,特別是那些廣告網站。我已經從剩下的答案中刪除了那些,但我會要求你在將來不添加這些。 –