如何更改可搜索微调器中项目的文本
How to change text of items in a searchable spinner
我正在尝试创建一个可搜索微调器并将数组适配器附加到它。微调器的内容应该是一个对象(我这样做是为了检索 ID 并显示名称)。我快完成了,但我没有显示名称,而是得到了这个:
searchable spinner
这是我的代码:
public class CitySpinnerAdapter extends ArrayAdapter<City> {
private Context context;
private ArrayList<City> myObjs;
public CitySpinnerAdapter(Context context, int textViewResourceId,
ArrayList<City> myObjs) {
super(context, textViewResourceId, myObjs);
this.context = context;
this.myObjs = myObjs;
}
public int getCount(){
return myObjs.size();
}
public City getItem(int position){
return myObjs.get(position);
}
public long getItemId(int position){
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
TextView label = new TextView(context);
label.setText(myObjs.get(position).getName());
return label;
}
@Override
public View getDropDownView(int position, View convertView,
ViewGroup parent) {
TextView label = new TextView(context);
label.setText(myObjs.get(position).getName());
return label;
}}
这是我创建微调器的方式:
city2Spinner = (SearchableSpinner) findViewById(R.id.city2);
CityDBHelper citydb = new CityDBHelper(getApplicationContext());
ArrayList<HashMap<String, String>> cities2 = citydb.getCities();
cities2Obj = new ArrayList<City>();
for(HashMap<String, String> city2 : cities2){
//for(String key : province.keySet()){
//String name = province.get(key);
cities2Obj.add(new City(Integer.valueOf(city2.get("id")), Integer.valueOf(city2.get("orig_id")), city2.get("name"), Integer.valueOf(city2.get("pid"))));
//}
}
CitySpinnerAdapter city2Adapter =
new CitySpinnerAdapter(AddProspectActivity.this,
android.R.layout.simple_spinner_item, cities2Obj);
//adapter2.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
city2Spinner.setTitle("Select City");
city2Spinner.setPositiveButton("OK");
city2Spinner.setAdapter(city2Adapter);
我真的很困惑我应该在哪里更改项目。请帮忙。我希望我是清楚的。 :((我正在使用 com.toptoche.searchablespinner:searchablespinnerlibrary:1.3.1)
试一试。解决方案是让您的 City
class 覆盖 toString()
方法。为了清楚起见,我刚刚添加了创建适配器的代码。
public String toString(){
return name;
}
适配器示例:
List<City> cities = ... ;
// Initializing an ArrayAdapter
citySpinnerArrayAdapter = new ArrayAdapter<>(this.getActivity(), R.layout.spinner_item, cities);
citySpinnerArrayAdapter.setDropDownViewResource(R.layout.spinner_dropdown_item);
citySpinner.setAdapter(citySpinnerArrayAdapter);
// setTitle and setPositiveButton
citySpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) {
//...
});
我正在尝试创建一个可搜索微调器并将数组适配器附加到它。微调器的内容应该是一个对象(我这样做是为了检索 ID 并显示名称)。我快完成了,但我没有显示名称,而是得到了这个: searchable spinner
这是我的代码:
public class CitySpinnerAdapter extends ArrayAdapter<City> {
private Context context;
private ArrayList<City> myObjs;
public CitySpinnerAdapter(Context context, int textViewResourceId,
ArrayList<City> myObjs) {
super(context, textViewResourceId, myObjs);
this.context = context;
this.myObjs = myObjs;
}
public int getCount(){
return myObjs.size();
}
public City getItem(int position){
return myObjs.get(position);
}
public long getItemId(int position){
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
TextView label = new TextView(context);
label.setText(myObjs.get(position).getName());
return label;
}
@Override
public View getDropDownView(int position, View convertView,
ViewGroup parent) {
TextView label = new TextView(context);
label.setText(myObjs.get(position).getName());
return label;
}}
这是我创建微调器的方式:
city2Spinner = (SearchableSpinner) findViewById(R.id.city2);
CityDBHelper citydb = new CityDBHelper(getApplicationContext());
ArrayList<HashMap<String, String>> cities2 = citydb.getCities();
cities2Obj = new ArrayList<City>();
for(HashMap<String, String> city2 : cities2){
//for(String key : province.keySet()){
//String name = province.get(key);
cities2Obj.add(new City(Integer.valueOf(city2.get("id")), Integer.valueOf(city2.get("orig_id")), city2.get("name"), Integer.valueOf(city2.get("pid"))));
//}
}
CitySpinnerAdapter city2Adapter =
new CitySpinnerAdapter(AddProspectActivity.this,
android.R.layout.simple_spinner_item, cities2Obj);
//adapter2.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
city2Spinner.setTitle("Select City");
city2Spinner.setPositiveButton("OK");
city2Spinner.setAdapter(city2Adapter);
我真的很困惑我应该在哪里更改项目。请帮忙。我希望我是清楚的。 :((我正在使用 com.toptoche.searchablespinner:searchablespinnerlibrary:1.3.1)
试一试。解决方案是让您的 City
class 覆盖 toString()
方法。为了清楚起见,我刚刚添加了创建适配器的代码。
public String toString(){
return name;
}
适配器示例:
List<City> cities = ... ;
// Initializing an ArrayAdapter
citySpinnerArrayAdapter = new ArrayAdapter<>(this.getActivity(), R.layout.spinner_item, cities);
citySpinnerArrayAdapter.setDropDownViewResource(R.layout.spinner_dropdown_item);
citySpinner.setAdapter(citySpinnerArrayAdapter);
// setTitle and setPositiveButton
citySpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) {
//...
});