Kap*_*l D 11 java layout android android-widget android-layout
我想在我的微调器的下拉视图中显示两个值.
目前,它只有一个城市名称,但我还想为它添加一个小距离字段.
MyCity<MyCityDistance> dataAdapter;
dataAdapter = new MyCity(this, R.layout.mycityrow, list);
dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
Run Code Online (Sandbox Code Playgroud)
我拥有自定义数据适配器的所有代码,扩展了我的视图和持有者等.
但是,显示的项目不显示城市及其与当前位置的距离.
它只显示MyCityDistance类的toString()方法中被覆盖的内容.
我甚至尝试过设置
dataAdapter.setDropDownViewResource(R.layout.mycityrow);
但是,没有成功.它抛出一个错误.
04-02 11:05:22.600: E/AndroidRuntime(367): java.lang.IllegalStateException: ArrayAdapter requires the resource ID to be a TextView
04-02 11:05:22.600: E/AndroidRuntime(367): at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:347)
04-02 11:05:22.600: E/AndroidRuntime(367): at android.widget.ArrayAdapter.getDropDownView(ArrayAdapter.java:376)
04-02 11:05:22.600: E/AndroidRuntime(367): at android.widget.Spinner$DropDownAdapter.getDropDownView(Spinner.java:332)
Run Code Online (Sandbox Code Playgroud)
创建自定义的好例子是setDropDownViewResource()什么?
即使我注释掉这一setDropDownViewResource()行,我也会得到同样的错误.
注意:唯一的效果mycityrow当前是Spinner的第一个元素按照布局显示mycityrow.但是,当我单击打开下拉列表时,该布局将丢失.在下拉选择期间我也想要相同的布局.
st0*_*0le 21
请注意,下面的示例使用内置的android.R.layout.simple_list_item_2,不幸的是文本颜色可能与背景相同.您可以通过创建自己的自定义视图来解决此问题,并在适配器中使用它.
让我知道我是否应该解释它的任何部分.
public class MainActivity extends Activity {
class City {
public City(String city, int d) {
this.city = city;
this.distance = String.valueOf(d);
}
String city;
String distance;
}
class CityAdapter extends ArrayAdapter<City> {
public CityAdapter(Context context, List<City> objects) {
super(context, android.R.layout.simple_list_item_2, objects);
}
@Override //don't override if you don't want the default spinner to be a two line view
public View getView(int position, View convertView, ViewGroup parent) {
return initView(position, convertView);
}
@Override
public View getDropDownView(int position, View convertView,
ViewGroup parent) {
return initView(position, convertView);
}
private View initView(int position, View convertView) {
if(convertView == null)
convertView = View.inflate(getContext(),
android.R.layout.simple_list_item_2,
null);
TextView tvText1 = (TextView)convertView.findViewById(android.R.id.text1);
TextView tvText2 = (TextView)convertView.findViewById(android.R.id.text2);
tvText1.setText(getItem(position).city);
tvText2.setText(getItem(position).distance);
return convertView;
}
}
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Spinner spinner = (Spinner)findViewById(R.id.spinner1);
List<City> list = new ArrayList<MainActivity.City>();
for(int i = 0; i < 10; i++)
list.add(new City(String.format("City %d", i + 1), (i + 1) * 1000));
spinner.setAdapter(new CityAdapter(this, list));
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
24162 次 |
| 最近记录: |