2012-08-04 49 views
1

我是Android开发新手,所以查询看起来似乎是新手。Android - 为Spinners动态添加值

我试图做一个应用程序,其中有一些spinners,并且在用户选择一个spinner后,另一个spinner会根据spinner1中的选择填充数据。

即。第一个用户选择国家。在国家的基础上,微调器2得到了充足的状态,并根据国家的规定,微调器3被城市填满。

我已经创建了所有的国家作为一个字符串数组中的strings.xml像 -

<string-array name="Country"> 
    <item >USA</item> etc... 

同样状态的string.xml为已创建 - (每个国家是有命名约定一个单独的条目如(国名)_(美国)

<string-array name="USA_state"> 
    <item >New York</item> etc... 

现在我想第二微调填充设在国家选择因此,通过我所用的公式是将获得第二个微调是 -

String getstate = country[index]+"_"+"state"; 
state=getResources() 
.getStringArray(getResources(). 
getIdentifier(getstate,null,getPackageName())); 

当我运行这个应用程序时,Manactivity只显示一个空白屏幕,我无法获得任何调试信息,并得到一个错误“jar文件android.jar没有附加源代码”。

请帮忙。下面的完整mainActivity给出 -

import android.os.Bundle; 
import android.app.Activity; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.widget.AdapterView; 
import android.widget.AdapterView.OnItemSelectedListener; 
import android.widget.ArrayAdapter; 
import android.widget.Spinner; 
import android.widget.Toast; 
import android.support.v4.app.NavUtils; 
import android.view.View; 

public class MainActivity extends Activity { 
String[] country; 
String[] state; 


@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    country = getResources().getStringArray(R.array.country); 
    Spinner country_spinner =(Spinner) findViewById(R.id.country); 
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, country); 
    country_spinner.setAdapter(adapter); 
    country_spinner.setOnItemSelectedListener(new OnItemSelectedListener(){ 
     public void onItemSelected (AdapterView<?> arg0, View arg1, int arg2, long arg3){ 
      int index = arg0.getSelectedItemPosition(); 
      Toast.makeText(getBaseContext(), "You have Selected"+country[index]+"country", Toast.LENGTH_SHORT).show(); 
      Fill (index); 
     } 
     public void onNothingSelected(AdapterView<?> arg0) {} 
    }); 


} 

protected void Fill(int index) { 
    // TODO Auto-generated method stub 
    //Field resField=R.array.getField(country[index]); 
    //int getstate = resField.getInt(null); 
    String getstate = country[index]+"_"+"state"; 
    state=getResources().getStringArray(getResources().getIdentifier(getstate,null,getPackageName())); 
    Spinner state_spinner = (Spinner) findViewById(R.id.state); 
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, state); 
    state_spinner.setAdapter(adapter); 
    state_spinner.setOnItemSelectedListener(new OnItemSelectedListener(){ 
     public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3){ 
      int index2 = arg0.getSelectedItemPosition(); 
      Toast.makeText(getBaseContext(),"You Have Selected "+state[index2] + " statet",Toast.LENGTH_SHORT).show(); 
     } 
     public void onNothingSelected(AdapterView<?> arg0){} 
    }); 

} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.activity_main, menu); 
    return true; 
} 

回答

2

我能解决这个问题。最终的代码如下。这是一个嵌套的方法,所以如果有3个纺纱厂(像州之后的城市),我们是否再次为该纺纱厂嵌套代码?有没有更简单的方法?

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, country); 
    country_spinner.setAdapter(adapter); 
    country_spinner.setOnItemSelectedListener(new OnItemSelectedListener(){ 

     public void onItemSelected (AdapterView<?> arg0, View arg1, int arg2, long arg3){ 
      int index = arg0.getSelectedItemPosition(); 
      Toast.makeText(getBaseContext(), "You have Selected"+country[index]+" County", Toast.LENGTH_SHORT).show(); 

      final CharSequence[] state_array = state.getTextArray(index); 
      final Spinner state_spinner =(Spinner) findViewById(R.id.state); 
      ArrayAdapter<CharSequence> adapter1 = new ArrayAdapter<CharSequence>(MainActivity.this, android.R.layout.simple_spinner_item, state_array); 
      state_spinner.setAdapter(adapter1); 
      state_spinner.setOnItemSelectedListener(new OnItemSelectedListener(){ 

       public void onItemSelected (AdapterView<?> arg0, View arg1, int arg2, long arg3){ 
        final int index = arg0.getSelectedItemPosition(); 
        Toast.makeText(getBaseContext(), "You have Selected"+state_array[index]+" State", Toast.LENGTH_SHORT).show(); 

     }); 

       } 
       public void onNothingSelected(AdapterView<?> arg0) { 
        state_spinner.setAdapter(null); 
       } 
      });