2016-08-17 96 views
2

我在設置微調器選擇時遇到問題。這是我在做什麼: 我有一個XML,其中我有一個按鈕和一個填充國家名稱的微調。我沒有使用適配器來填充微調框,而是在values文件夾中的字符串文件中命名了一個數組,該文件夾中有許多項目作爲國名。現在選擇一個國家可以說我選擇英格蘭並點擊按鈕。點擊一個新的活動是開始,其中也有一個微調器,用相同的方式填充相同的列表。但我想要的是,第二個活動微調應該顯示所選的國家是英格蘭在這種情況下,作爲微調器中的當前項目。 但我解決不了。 下面是一段代碼我所做以編程方式設置微調器選擇

//第一項活動XML

<Spinner 
    android:id="@+id/spinner1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:entries="@array/sehirler" 
    android:prompt="@string/sehirsec" /> 

//次活動XML

<Spinner 
    android:id="@+id/spinner2" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:entries="@array/sehirler" 
    android:prompt="@string/sehirsec" /> 

// Firstactivity代碼

spinner = (Spinner)findViewById(R.id.spinner1); 

button.setOnClickListener(new OnClickListener() { 
    @Override 
    public void onClick(View arg0) { 
     spinnerItem = spinner .getSelectedItem().toString(); 

     Intent intent = new Intent(firstactivity.this, secondactivty.class); 
     intent.putExtra("name", spinnerItem); 
     startActivity(intent); 
    } 
}); 

//第二活動代碼

sehir = (Spinner)findViewById(R.id.spinner2); 
Intent intent = getIntent(); 
String name2 = intent.getExtras().getString("name"); 

sehir.setSelection(getIndex(sehir, name2)); 

private int getIndex(Spinner spinner, String myString) { 
    int index = 0; 

    for (int i=0;i<spinner.getCount();i++) { 
     if (spinner.getItemAtPosition(i).equals(myString)) { 
      index = i; 
     } 
    } 
     return index; 
    } 
} 
+0

我已經試過你的代碼,它工作正常和我一起去薑餅。當您創建方法「私人詮釋getIndex(微調微調等等......」正在創建的方法的onCreate之外,對吧? –

+0

是外面的onCreate。難道我的工作對你罰款? –

+0

是它爲我工作,你可以發佈您的完整代碼,或悄悄話我 –

回答

1

看來你spinner2是不是在第二個活動,但在一個完全不同的佈局。檢查並看看你是否有適配器。如果您有自定義適配器,那麼您必須將該位置值傳遞給自定義適配器的構造函數。

在你的第二個活動,位置值傳遞給CustomAdapter構造:

Intent intent = getIntent(); 
position = intent.getIntExtra("position", 0); 

CustomAdapter jsonCustomAdapter = new CustomAdapter(SecondActivity.this, list, position); 

在你CustomAdapter,設置它是這樣的:

public class CustomAdapter extends BaseAdapter { 

    private LayoutInflater inflater; 
    private List<ItemObject> list; 
    private int spinnerPosition; 

    public CustomAdapter(Context context, List<ItemObject> list, int position) { 
     inflater =(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     this.list = list; 
     spinnerPosition = position; 
    } 

    @Override 
    public int getCount() { 
     return list.size(); 
    } 

    @Override 
    public Object getItem(int position) { 
     return position; 
    } 

    @Override 
    public long getItemId(int position) { 
     return position; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 

     ViewHolder listViewHolder; 
     if(convertView == null){ 
      listViewHolder = new ViewHolder(); 
      convertView = inflater.inflate(R.layout.list, parent, false); 
      listViewHolder.spinner = (Spinner)convertView.findViewById(R.id.spinner2); 
      convertView.setTag(listViewHolder); 
     } else { 
      listViewHolder = (ViewHolder)convertView.getTag(); 
     } 

     listViewHolder.spinner.setSelection(spinnerPosition); 
     return convertView; 
    } 

    static class ViewHolder{ 
     Spinner spinner; 
    } 
} 
+0

這是不是一回事?我是找到指數通過在onCreate之外創建的函數,我在 –

+0

內完成了該工作,我發現問題所在,您的spinner2不在第二個活動中,而是在您的自定義適配器中完全不同的佈局中,因此您必須將位置傳遞給自定義適配器的構造函數。我會爲你編輯我的答案。 –

+0

非常感謝,請評價我的問題 –