好吧,我read around並且看到Java只通過值傳遞,而不是通過引用,所以我不知道如何實現這一點。通過引用多個Spinner的setOnItemSelectedListener傳遞字符串變量
- 我有6個Spinners在Android Activity中被填充了不同的SQLite查詢。
- 填充每個Spinner並設置OnItemSelectedListener的代碼非常相似,所以我希望重構爲一個方法,並使用每個Spinner ID和Sqlite查詢調用它6次。
如何獲得微調onItemSelectedListener更改每個不同微調器上的正確實例成員?
public void fillSpinner(String spinner_name, final String field_name) { // This finds the Spinner ID passed into the method with spinner_name // from the Resources file. e.g. spinner1 int resID = getResources().getIdentifier(spinner_name, "id", getPackageName()); Spinner s = (Spinner) findViewById(resID); final Cursor cMonth; // This gets the data to populate the spinner, e.g. if field_name was // strength = SELECT _id, strength FROM cigars GROUP BY strength cMonth = dbHelper.fetchSpinnerFilters(field_name); startManagingCursor(cMonth); String[] from = new String[] { field_name }; int[] to = new int[] { android.R.id.text1 }; SimpleCursorAdapter months = new SimpleCursorAdapter(this, android.R.layout.simple_spinner_item, cMonth, from, to); months.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); s.setAdapter(months); // This is setting the Spinner Item Selected Listener Callback, where // all the problems happen s.setOnItemSelectedListener(new OnItemSelectedListener() { public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { Cursor theCursor = (Cursor) parent.getSelectedItem(); // This is the problem area. object_reference_to_clas_member_of_field_name = theCursor .getString(theCursor.getColumnIndex(field_name)); } public void onNothingSelected(AdapterView<?> parent) { // showToast("Spinner1: unselected"); } });
}
調用此方法像這樣fillSpinner("spinner1","strength");
。
它找到編號爲spinner1
的微調框並在數據庫中查詢strength
字段。 field_name,這個例子中的強度必須被聲明爲在onItemSelectedListener中使用的最終變量,否則我會得到錯誤Cannot refer to a non-final variable field_name inside an inner class defined in a different method
。
但是,如何在使用每個不同的Spinner時,如何讓onItemSelectedListener更改不同實例成員的值?這是所有重要的代碼行:
我不能使用最終的字符串,因爲當用戶選擇不同的值時,變量顯然會改變。我已經讀了很多,很難找到解決方案。我可以複製並粘貼這段代碼6次,忘掉重構,但我真的很想知道這個優雅的解決方案。如果你不明白我的問題,請發表評論,我不確定我是否能夠很好地解釋自己。
實際上,目前尚不清楚你想要什麼,什麼問題你都面臨着onItemSelected。請詳細說明。 – jeet 2012-01-18 04:59:30
'不能在不同的方法中定義的內部類中引用非最終變量field_name',爲什麼不在主類中全局聲明'field_name'。 – 2012-01-21 04:35:24