Форум программистов, компьютерный форум CyberForum.ru

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

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

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

21.10.2014, 15:09. Просмотров 539. Ответов 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 минут
Более детально и просто описал проьлему в другой теме: Что я неправильно делаю при реализации поиска?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.10.2014, 15:09     Поиск в андроид справочнике
Посмотрите здесь:

Android OnClickListener в Андроид
Андроид с нуля Android
Программирование на андроид Android
андроид студио Android
Android Книги андроид С#
Хранение данных в приложении-справочнике Android
Портирование на Андроид Android
Android Погода в андроид
Android Служба в андроид 5
Android Версия андроид
Переквалификация с C# на андроид Android
Архиватор на андроид Android

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DemD10
58 / 47 / 12
Регистрация: 03.09.2013
Сообщений: 433
21.10.2014, 18:43     Поиск в андроид справочнике #2
Смотря чего ты добиваешься. Как понял я тебе в списке просто нужно найти что-то. Так зачем тогда другая активность?
yourfanat
5 / 5 / 0
Регистрация: 30.10.2013
Сообщений: 177
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});
      }
Yandex
Объявления
21.10.2014, 19:31     Поиск в андроид справочнике
Ответ Создать тему
Опции темы

Текущее время: 02:54. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru