Форум программистов, компьютерный форум, киберфорум
Наши страницы

Программирование Android

Войти
Регистрация
Восстановить пароль
 
yourfanat
5 / 5 / 0
Регистрация: 30.10.2013
Сообщений: 180
#1

Поиск в Android-справочнике - Программирование Android

21.10.2014, 15:09. Просмотров 578. Ответов 2
Метки нет (Все метки)

Есть задача реализовать поиск в справочнике. Есть одна активити куда списком из базы данных с помощью CursorLoader выводится информация. Пробую реализовать поиск по справочнику через Android Search Widget.
На данный момент в качестве searchable activity выстуапает активити в которой выводится списком сам справуочник. Вопрос вот в чем - правильно ли это? Или нужно создать отдельную активити под поиск?

Как я понял создается копия моей активити при нажатии на поиск? Это связанные копии или нет? Могу я ее заполнять другими данными, полученными из поиска? А затем вернуться с помощью кнопки BACK к всему списку?

Добавлено через 1 час 12 минут
Приведу код. Проблема состоит в методе
Java
1
doMySearch(query);
который должен отвечать за реализацию поиска и вывод результата в текущую активити. Переопределяя список.
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
package com.example.citycode;
 
import java.util.concurrent.TimeUnit;
 
import android.app.SearchManager;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.support.v4.app.LoaderManager.LoaderCallbacks;
import android.support.v4.content.CursorLoader;
import android.support.v4.content.Loader;
import android.support.v4.widget.SimpleCursorAdapter;
import android.support.v7.app.ActionBarActivity;
import android.support.v7.widget.SearchView;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.ListView;
 
public class MainActivity extends ActionBarActivity implements LoaderCallbacks<Cursor> {
 
  ListView lvData;
  DBHelper db;
  SimpleCursorAdapter scAdapter;
 
  /** Called when the activity is first created. */
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    
    // Открываем подключение к БД
    db = new DBHelper(this);
    db.open();
    
    // Get the intent, verify the action and get the query
    Intent intent = getIntent();
    if (Intent.ACTION_SEARCH.equals(intent.getAction())) {
      String query = intent.getStringExtra(SearchManager.QUERY);
      doMySearch(query);
    }
 
 
    
    // Формируем столбцы сопоставления
    String[] from = new String[] { DBHelper.COLUMN_r_name, DBHelper.COLUMN_region, DBHelper.COLUMN_code};
    int[] to = new int[] { R.id.city_name, R.id.region_name, R.id.city_code };
 
    // Создаем адаптер и настраиваем список
    scAdapter = new SimpleCursorAdapter(this, R.layout.item, null, from, to, 0);
    lvData = (ListView) findViewById(R.id.listdata);
    lvData.setAdapter(scAdapter);
    
    
    // Создаем лоадер для чтения данных
    getSupportLoaderManager().initLoader(0, null, this);
    
    
  }
 
  protected void onDestroy() {
    super.onDestroy();
    // Закрываем подключение к БД при выходе
    db.close();
  }
  
  public void doMySearch(String query) {
        //Ищем совпадения
        Cursor cursor1 = db.fetchRecordsByQuery(query);
        startManagingCursor(cursor1);
        String[] from = new String[] { DBHelper.COLUMN_r_name, DBHelper.COLUMN_region, DBHelper.COLUMN_code};
        int[] to = new int[] { R.id.city_name, R.id.region_name, R.id.city_code };
 
        SimpleCursorAdapter records = new SimpleCursorAdapter(this,
                R.layout.item, cursor1, from, to);
        //Обновляем адаптер
        lvData.setAdapter(records);
      }
  
     @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        
        // Get the SearchView and set the searchable configuration
        SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
        SearchView searchView = (SearchView) menu.findItem(R.id.action_settings).getActionView();
        // Assumes current activity is the searchable activity
        //searchView.setSubmitButtonEnabled(true);
        searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
        searchView.setIconifiedByDefault(false); // Do not iconify the widget; expand it by default
        
        return true;
    }
 
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            //onSearchRequested();
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
 
  @Override
  public Loader<Cursor> onCreateLoader(int id, Bundle bndl) {
    return new MyCursorLoader(this, db);
  }
 
  @Override
  public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) {
    scAdapter.swapCursor(cursor);
  }
 
  @Override
  public void onLoaderReset(Loader<Cursor> loader) {
  }
  
  static class MyCursorLoader extends CursorLoader {
 
      DBHelper db;
    
    public MyCursorLoader(Context context, DBHelper db) {
      super(context);
      this.db = db;
    }
    
    @Override
    public Cursor loadInBackground() {
      Cursor cursor = db.getAllData();
      try {
        TimeUnit.SECONDS.sleep(2);
      } catch (InterruptedException e) {
        e.printStackTrace();
      }
      return cursor;
    }
    
  }
}
Ошибка выдается следующая:
10-21 11:32:41.357: E/AndroidRuntime(6103): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.citycode/com.example.citycode.MainActivity}: java.lang.IllegalArgumentException: Cannot bind argument at index 1 because the index is out of range. The statement has 0 parameters.

Как можно решить?

Добавлено через 2 часа 27 минут
Более детально и просто описал проьлему в другой теме: Что я неправильно делаю при реализации поиска?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.10.2014, 15:09
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Поиск в Android-справочнике (Программирование Android):

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

Поиск в большом проекте Android Studio - Программирование Android
Если у меня есть большой проект и этот проект писал не я. Но я хочу найти в этом коде, ну скажем место, где формируется push уведомление...

Поиск движка для создания 2D игры под Android - Программирование Android
Доброго времени суток, уважаемые форумчане! Не так давно (недели две назад) появилась идея о создании игры для Android'a (ну для начала)....

Поиск книг по программированию под Android в среде разработки Xamarian/VisualStudio/dot42 - Программирование Android
Прошу помоши в поиске книг по программированию под андроид в среде разработки Xamarian/VisualStudio/dot42. Все что находил адресовалось...

Хранение данных в приложении-справочнике - Программирование Android
Есть задача написать приложение со списком заведений города... Есть текстовой файл с набором данных в виде: Название организации, адрес,...

Откуда берутся атрибуты android:layout_width и android:layout_height в элементе LinearLayout? - Программирование Android
Недавно начал изучать Android API, а сегодня более менее разобрал основы синтакиса XML. Затем стал разбирать следующий пример: ...

2
DemD10
58 / 47 / 12
Регистрация: 03.09.2013
Сообщений: 443
21.10.2014, 18:43 #2
Смотря чего ты добиваешься. Как понял я тебе в списке просто нужно найти что-то. Так зачем тогда другая активность?
0
yourfanat
5 / 5 / 0
Регистрация: 30.10.2013
Сообщений: 180
21.10.2014, 19:31  [ТС] #3
Я просто не очень разобрался как правильно реализовывать поиск... У меня выдается ошибка в коде, и я не пойму что я делаю не так... Активити в приведенном коде одна, что не так - не пойму... Помогииите!
Кстати запрос из класса с БД выглядит вот так:

Java
1
2
3
4
5
6
      String sqlQuery1 = "SELECT * FROM city AS t1, region AS t2 WHERE t1.region_number LIKE '%" + "?" + "%'";
      
         //Поиск запросом LIKE
      public Cursor fetchRecordsByQuery(String query) {
          return  myDataBase.rawQuery(sqlQuery1, new String[] {query});
      }
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.10.2014, 19:31
Привет! Вот еще темы с ответами:

Не предлагается установка Android SDK при установке Android Studio - Программирование Android
на сайте https://developer.android.com/studio/... скачал exeшник для установки Android Studio. Скачал, запустил и в Android Studio...

Ошибка: Caused by Android java.lang.ClassCastException: android.app.Application cannot be cast - Программирование Android
Здравствуйте. Очень нужен ваш совет. При запуске приложения появляется ошибка: Caused by: java.lang.ClassCastException:...

Android studio, как запускать программу сразу на android смартфоне подключенному к usb? - Программирование Android
android studio, как запускать программу сразу на android смартфоне подключенному к usb?

Как приложение Android написать на С++ в Android NDK, чтоб получить *.apk? Нужен мануал - Программирование Android
Уже не в первый раз задаю вопрос. Молчание. В лучшем случае - &quot;RTFM&quot; и точка. Так вот, официального мануала, где есть ответ на...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru