Android: проблема возврата из списка в список - PullRequest
0 голосов
/ 04 июля 2011

У меня проблемы с двумя списками, каждый из которых генерируется действием. Из списка A, списка элементов, я могу перейти к списку B, опции для определенного элемента списка A.

Проблема в том, что когда я перехожу от А к В, затем обратно (с помощью кнопки Android) назад к А, а затем снова пытаюсь перейти к В: ( A -> B - кнопка возврата -> A -> ошибка при попытке перейти к B).

Я действительно даже не знаю, с чего начать поиск ошибки, поэтому я хотел спросить здесь: кто-нибудь с той же ошибкой, кто решил ее и может поделиться решением?

Спасибо!

EDIT: Я публикую здесь соответствующий код, поскольку я сказал, что не знаю, что может быть причиной ошибки, поэтому я опубликовал два списка:

LISTVIEW A : на нем есть изображение, название чрезвычайной ситуации и сведения о расстоянии.

public class EmergenciesList extends ListActivity {
String[] listaEmergencias = new String[] { "Raoul Duffy con Wisconsin",
        "Mac Iver con Moneda", "Cdte. Malbec con Barnechea",
        "Av. Apoquindo con Pehuen", "Las Hualtatas con Indiana" };

String[] detalleEmergencias = new String[] { "< 50 mts", "2 km", "1,2 km",
        "3,4 km", "350 mts" };

private Integer[] imgid = { R.drawable.chico, R.drawable.mediano,
        R.drawable.grande, R.drawable.chico, R.drawable.mediano,
        R.drawable.grande };

RelativeLayout layr1;
Animation ar3;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    mInflater = (LayoutInflater) getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
    data = new Vector<RowData>();

    for (int i = 0; i < listaEmergencias.length; i++) {
        try {
// RowData is just a private class for the title, details, and image.
            rd = new RowData(i, listaEmergencias[i], detalleEmergencias[i]);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        data.add(rd);
    }

    adapter = new CustomAdapter(this, R.layout.second_list, R.id.title, data);
    setListAdapter(adapter);
    getListView().setTextFilterEnabled(true);
}

public void onListItemClick(ListView parent, View v, int position, long id) {
    adapter = (CustomAdapter) parent.getAdapter();
    data.removeAllElements();

    Intent singleEmergencyMenu = new Intent(EmergenciesList.this, EmergencyMenu.class);
    Bundle container = new Bundle();
    container.putInt("id", position);
    singleEmergencyMenu.putExtra("data2", container);
    startActivity(singleEmergencyMenu);
}
}

LISTVIEW B : имеет заголовок в заголовке и три элемента в списке.

public class EmergencyMenu extends ListActivity {
String[] emergencia = new String[] { "Mostrar ubicación",
        "Carros asignados", "Archivos" };
final String SETTING_EMERGENCY = "id_actual_emergency";
private int emergencyID = -1;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    this.emergencyID = getIntent().getBundleExtra("data2").getInt("id");

    ListView lv = getListView();
    lv.setTextFilterEnabled(true);

    // A Header to have a single checkbox to select the emergency
    LayoutInflater inflater = (LayoutInflater) this
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    TextView header = (TextView) inflater.inflate(
            R.layout.list_reports_header, null);
    lv.addHeaderView(header, null, false);

    List<String> data = new ArrayList<String>();

    for (int i = 0; i < emergencia.length; i++) {
        try {
            data.add(emergencia[i]);
        } catch (ParseException e) {
            e.printStackTrace();
        }
    }

    setListAdapter(new ArrayAdapter<String>(this, R.layout.emergency_menu,
            data));

    LoadSelection();

    CheckBox checkBox = (CheckBox) findViewById(R.id.select_emergency_id);
    checkBox.setOnCheckedChangeListener(new OnCheckedChangeListener() {
        public void onCheckedChanged(CompoundButton buttonView,
                boolean isChecked) {
            SaveSelection();
        }
    });

    lv.setOnItemClickListener(new OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view,
                int position, long id) {

            // Mostrar ubicación
            if (position == 1) {
                Toast.makeText(getApplicationContext(),"Mostrar ubicación", Toast.LENGTH_SHORT).show();
            }

            // Carros asignados
            else if (position == 2) {
                Toast.makeText(getApplicationContext(), "Carros asignados",Toast.LENGTH_SHORT).show();
            }

            // Archivos
            else if (position == 3) {
                Toast.makeText(getApplicationContext(),
                        "Archivos de la emergencia",Toast.LENGTH_SHORT).show();
            }

        }
    });
}

@Override
protected void onPause() {
    SaveSelection();
    super.onPause();
}

// save the selections in the shared preference in private mode for the
// user
private void SaveSelection() {
    CheckBox checkBox = (CheckBox) findViewById(R.id.select_emergency_id);
    if (checkBox.isChecked()) {
        SharedPreferences settingsActivity = getPreferences(MODE_PRIVATE);
        SharedPreferences.Editor prefEditor = settingsActivity.edit();
        prefEditor.putInt(SETTING_EMERGENCY, emergencyID);
        prefEditor.commit();
    }
}

// Check the checkbox if this is the actual emergency (selected before).
private void LoadSelection() {
    SharedPreferences settingsActivity = getPreferences(MODE_PRIVATE);

    if (settingsActivity.contains(SETTING_EMERGENCY)) {
        // Checkbox de seleccionar la emergencia
        int id_actual = settingsActivity.getInt(SETTING_EMERGENCY, -1);
        if (emergencyID == id_actual) {
            CheckBox checkBox = (CheckBox) findViewById(R.id.select_emergency_id);
            checkBox.setChecked(true);
        }
    }
}

}

Ответы [ 2 ]

0 голосов
/ 04 июля 2011

Вы создаете B ListView каждый раз или просто показываете его?Может быть, кнопка НАЗАД «убивает» ее, а затем, когда вы пытаетесь показать ее снова, она пуста или ссылается на что-то пустое.Покажите нам соответствующий код и любые ошибки.Всегда полезно использовать журнал для отслеживания значений и т. Д. У меня не было этой конкретной проблемы.

0 голосов
/ 04 июля 2011

Возможно, проблема связана с реализацией вашего намерения, вы должны объявить его в классе, а затем в методе, который вы создадите.Вы можете опубликовать код так, как вы выполняете

...