Использование rawQuery для передачи _id из списка и заполнения деталей выбора в новом действии (Android) - PullRequest
0 голосов
/ 03 марта 2012

У меня есть действие с просмотром списка, в котором отображаются результаты предыдущего просмотра списка. Два вида просмотра списка:

Список городов. Список улиц в этом городе.

Когда я выбираю улицу в своем ListView, я хочу заполнить другое действие определенными сведениями об улице, которые хранятся в моей базе данных (например, рестораны или достопримечательности).

Я пытаюсь передать _id улицы, по которой я щелкнул, и получить ее в своем новом действии (так же, как я делал с действием «Город на улицу»), но я не могу вернуть никаких результатов. Ниже мой код. Буду признателен за любую помощь в попытке выяснить это.

Вот часть моего кода, чтобы получить информацию о нажатии на определенную улицу. Проще говоря, я просто пытаюсь отобразить идентификатор и имя снова, чтобы получить что-то для заполнения из строки:

    @Override
    protected void onListItemClick(ListView parent, View view, int position, long id) {
        //super.onListItemClick(parent, view, position, id);
        Intent intent = new Intent(this, Street_Details.class);
        Cursor cursor = (Cursor)adapter.getItem(position);
        intent.putExtra("Street_ID", cursor.getInt(cursor.getColumnIndex("_id")));

        startActivity(intent);


    }

И вот мой код в моей новой деятельности, чтобы отобразить некоторые детали этой улицы:

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

   Intent i = getIntent(); 
   streetId = getIntent().getIntExtra("Street_ID", 0);
   db.openDataBase();

   Cursor cursor = myDataBase.rawQuery("SELECT _id as _id, City_id, Street FROM Streets WHERE _id = '" +streetId+"'", null);

    if (cursor.getCount() == 1)
    {
        cursor.moveToFirst();

        elevation = (TextView) findViewById(R.id.elevation);
        elevation.setText(cursor.getString(cursor.getColumnIndex("Street_Id)));

        elevation1 = (TextView) findViewById(R.id.elevation1);
        elevation1.setText(cursor.getString(cursor.getColumnIndex("Street")));
    }

Любая помощь будет отличной! Спасибо за поиск.

Ответы [ 2 ]

1 голос
/ 04 марта 2012

Это сбивает с толку.Вы пытаетесь отобразить город и его улиц в одном ListView?Это будет грязно.Насколько я могу судить, вы делаете это с помощью адаптера, который содержит массив курсоров, и я не уверен, что это будет работать.

Независимо от того, параметр для onListItemClicked (), который указывает напункт в данных поддержки не позиция , а id .Position - индекс элемента списка в ListView;id - это значение _ID строки в курсоре (для адаптеров курсора) или индекс элемента данных в данных.Они могут быть разными.

Затем вы вводите идентификатор улицы в качестве индекса столбца значения _id в курсоре ?!Это не имеет смысла для меня.В следующем упражнении вы не будете выбирать по идентификатору улицы, вы будете выбирать по индексу идентификатора улицы столбец в курсоре.

I 'Мне нужно больше узнать о вашей организации базы данных, чтобы дать вам дальнейшие указания.Однако, если бы я реализовывал это, я бы отображал города в одном упражнении и улицы в следующем.

0 голосов
/ 29 мая 2014

A.Элк указал на более чем одну проблему с организацией действий, но одну из них легко решить: найти идентификатор записи (значение, содержащееся в столбце «_id» в базе данных) на основе идентификатора курсора.Вот как я это сделал:

getListView().setOnItemClickListener(new OnItemClickListener() {

    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        c.moveToPosition(position);
        String recId = c.getString(0);
        Intent intent = new Intent(view.getContext(), DisplayRecordActivity.class);
        intent.putExtra(RECORD_ID, recId);
        startActivity(intent);
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...