gpt4 book ai didi

java - 自定义 setDropDownViewResource 微调项的示例

转载 作者:搜寻专家 更新时间:2023-10-30 21:20:06 24 4
gpt4 key购买 nike

我想在微调器的下拉 View 中显示两个值。

目前,它只有一个城市名称,但我还想给它添加一个小的距离字段。

    MyCity<MyCityDistance> dataAdapter;  

dataAdapter = new MyCity(this, R.layout.mycityrow, list);
dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

我有自定义数据适配器的所有代码,扩展我的 View 和持有人等。

但是,显示的项目不会同时显示城市及其与我当前位置的距离。

它仅显示在 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)

创建您自己的自定义 setDropDownViewResource() 的好例子是什么?

即使我注释掉 setDropDownViewResource() 行,我也会得到同样的错误。

注意:mycityrow 当前唯一的影响是 Spinner 的第一个元素按照 mycityrow 的布局显示。但是,当我单击打开下拉菜单时,该布局丢失了。我也希望在下拉选择期间使用相同的布局。

最佳答案

请注意下面的示例使用了内置的 android.R.layout.simple_list_item_2,不幸的是文本颜色可能与背景相同。您可以通过创建自己的自定义 View 并在适配器中使用它来简单地解决这个问题。

如果我应该解释其中的任何部分,请告诉我。

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));

}

}

关于java - 自定义 setDropDownViewResource 微调项的示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9970675/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com