我有spinner
这样:
List<Vehicle> vehicles = dataSource.getAllVehicles();
Spinner spVehicle = (Spinner) dialog.findViewById(R.id.spVehicle);
SpinnerVehicleAdapter sAdapter = new SpinnerVehicleAdapter(getContext(), R.layout.spinner_textview, vehicles);
spVehicle.setAdapter(sAdapter);
我想预先选择微调器的下拉值,所以我认为我必须使用匹配的Vehicle
对象进行预选,对吗?
请注意,这是在我可以访问的ArrayAdapter<Oil>
内:
Oil oilChange;
oilChange.getVehicleId();
所以,有了这些信息,我试着像这样设置:
Vehicle v = new Vehicle(getContext(), oilChange.getVehicleId());
int spinnerPostion = sAdapter.getPosition(v);
spVehicle.setSelection(spinnerPostion);
以下是补充方法:(我相信我已经确认下面的代码不是问题。)
public Vehicle(Context mContext, int vehicleId) {
GasDataSource datasource = new GasDataSource(mContext);
datasource.open();
Vehicle vehicle = datasource.createVehicle(vehicleId);
this.vehicleName = vehicle.getVehicleName();
this.vehicleYear = vehicle.getVehicleYear();
this.vehicleModel = vehicle.getVehicleModel();
this.vehicleMake = vehicle.getVehicleMake();
this.oilDistance = vehicle.getOilDistance();
this.drivenDistance = vehicle.getDrivenDistance();
datasource.close();
}
然后:
public Vehicle createVehicle(long id) {
if (!database.isOpen()) {
open();
}
Vehicle vehicle = new Vehicle();
Cursor cursor = database.query(MySQLiteHelper.TABLE_VEHICLE, allVehColumns, MySQLiteHelper.COLUMN_VEHICLE_ID + " = " + id, null, null, null, null);
while (cursor.moveToNext()) {
vehicle = cursorToVehicle(cursor);
}
// Make sure to close the cursor
cursor.close();
return vehicle;
}
现在,spinner
下拉列表使用了属性vehicle.vehicleName
;
我有一个:
public String toString() {return getVehicleName(); }
......也在我的车辆课上。
另外,我没有崩溃,我根本无法根据提供的车辆对象设置选择。
通过记录我确认我正在根据列表行创建正确的对象。所以我的SQL
很好。但是我在spinnerPosition
中返回-1。
这可以用我的方法吗?或者我必须匹配String
而非Object
s?
编辑:这是我的工作代码
Vehicle v = dataSource.findVehicle(oilChange.getVehicleId(), vehicles);
if (v != null) {
int spinnerPostion = sAdapter.getPosition(v);
spVehicle.setSelection(spinnerPostion);
}
public Vehicle findVehicle(long id, List<Vehicle> list) {
for(Vehicle vehicle : list) {
if(vehicle.getId() == id) {
return vehicle;
}
}
return null;
}
答案 0 :(得分:1)
Vehicle v = new Vehicle(getContext(), oilChange.getVehicleId()); int spinnerPostion = sAdapter.getPosition(v); spVehicle.setSelection(spinnerPostion);
我认为您正在使用的上述代码就是问题所在。 您正在使用Vehicle的新实例来获取对象的位置 来自sAdapter。 ArrayAdapter.getPosition(T item)仅适用于您 得到一个对象是适配器的一部分,在你的情况下 将是dataSource.getAllVehicles()的列表。
List<Vehicle> vehicles = dataSource.getAllVehicles();
您将始终获得-1,因为您正在寻找的车辆是新创建的 一个,那不在那个列表中。使用属于您使用的原始列表的Vehicle实例。可能是,通过在数据源中创建一个函数并传递Vehicle ID并返回在调用getAllVehicles时创建的Vehicle实例。
答案 1 :(得分:0)
而不是使用Vehicle对象进行预选,请尝试设置微调器的索引
spVehicle.setSelection(intValueOfPreSelectedPosition);