Android - данные Spinner исчезают - PullRequest
1 голос
/ 10 апреля 2011

У меня есть активность Android, которая отображает счетчик, заполненный данными из базы данных. OnCreate () указан здесь:

@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.fuel_entry);

    vehicleDataCursor = VehicleDataProvider.getVehicles();
    startManagingCursor(vehicleDataCursor);

    String[] from = new String[]{REGISTRATION_NO_COLUMN, DESCRIPTION_COLUMN}; 
    int[] to = new int[]{R.id.vehicle_db_row_registration_number, R.id.vehicle_db_row_description};

    vehicleAdapter =
        new SimpleCursorAdapter(this, R.layout.vehicle_spinner_row, vehicleDataCursor, from, to);

    vehicleSpinner = (Spinner) findViewById(R.id.spinner);
    vehicleSpinner.setAdapter(vehicleAdapter);

mileageEntry = (EditText) findViewById(R.id.fuel_entry_mileage_edit_text);

fuelAmountEntry = (EditText) findViewById(R.id.fuel_entry_fuel_edit_text);

fuelEntryOkButton = (Button) findViewById(R.id.fuel_entry_ok_button);
fuelEntryOkButton.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
    String registrationNumber = "";
    Cursor cc = (Cursor)(vehicleSpinner.getSelectedItem());
    if (cc != null)
    {
    registrationNumber = cc.getString(cc.getColumnIndexOrThrow(REGISTRATION_NO_COLUMN));
        if(FuelUseDataProvider.addFuelUp(registrationNumber, Integer.parseInt(mileageEntry.getText().toString()), Integer.parseInt(fuelAmountEntry.getText().toString()), System.currentTimeMillis()) != DATABASE_INSERT_ERROR_CODE)
            {
            showMPGDialog(registrationNumber);
            }
            else
            {
          //do error handling
            }
            cc.close();
       }
}
});}

Работает нормально, но есть небольшая проблема - когда пользователь заполняет форму и щелкает fuelEntryOkButton, отображается диалоговое окно, как и предполагалось, но счетчик освобождается от своих данных. Если я удалил cc.close (); линия, проблема уходит. Очевидно, я хотел бы закрыть курсор, когда я закончу с ним. Я не могу этого понять - это VehicleDataCursor, который предоставляет данные для курсора, а не cc.

Есть идеи, почему мой Spinner теряет свои данные?

1 Ответ

1 голос
/ 10 апреля 2011
Cursor cc = (Cursor)(vehicleSpinner.getSelectedItem());

Насколько я понимаю, когда вы делаете это, вы просто получаете ссылку на Курсор, связанный с Spinner.Другими словами, ссылка на vehicleDataCursor.

Когда вы закрываете cc, вы фактически закрываете vehicleDataCursor.

Это имеет смысл?

...