我有一个像这样的
我希望能够预先选择下拉菜单中的选项值,所以我认为我需要使用与之匹配的“车辆对象”来预先选择它,对吗?
请注意,这是在一个
所以,基于这些信息,我尝试像这样设置它:
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);
我希望能够预先选择下拉菜单中的选项值,所以我认为我需要使用与之匹配的“车辆对象”来预先选择它,对吗?
请注意,这是在一个
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
?
编辑:这是我的可行代码
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;
}