Я использую SQL в качестве источника данных. В окне поиска моего приложения есть автозаполнение, но в настоящее время оно может возвращать результаты только в 1 столбце (например, column1). Я хочу, чтобы он мог выполнять поиск по 2 столбцам (например, column1 + column2) и отображать результат обоих столбцов в раскрывающемся списке автозаполнения. Это код, с которым я пытаюсь реализовать метод, но безуспешно.
public void LoadSuggestions(){
final String[] from = new String[] {"column1", "column2"};
final int[] to = new int[] {R.id.suggestion_text}; //suggestion_text is the TextView to populate
suggestionAdapter = new SimpleCursorAdapter(MainActivity.this,
R.layout.suggestion_row,null, from, to,0){
@Override
public void changeCursor(Cursor cursor) {
super.swapCursor(cursor);
}
};
search.setSuggestionsAdapter(suggestionAdapter);
search.setOnSuggestionListener(new SearchView.OnSuggestionListener() {
@Override
public boolean onSuggestionClick(int position) {
CursorAdapter ca = search.getSuggestionsAdapter();
Cursor cursor = ca.getCursor();
cursor.moveToPosition(position);
String clicked_word = cursor.getString(cursor.getColumnIndex("column1"));
search.setQuery(clicked_word, false);
search.clearFocus();
search.setFocusable(false);
Intent intent = new Intent(MainActivity.this, WordMeaningActivity.class);
Bundle bundle = new Bundle();
bundle.putString(("column1",clicked_word);
intent.putExtras(bundle);
startActivity(intent);
return true;
}
@Override
public boolean onSuggestionSelect(int position) {
return true;
}
});
search.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
String text = search.getQuery().toString();
Pattern p = Pattern.compile("[A-Za-züÜöÖőŐűŰáÁéÉíÍóÓúÚ \\-.]{1,25}");
Matcher m = p.matcher(text);
if(m.matches())
{
Cursor c = myDbHelper.getMeaning(text);
if(c.getCount()==0)
{
showAlertDialog();
}
else
{
search.clearFocus();
search.setFocusable(false);
Intent intent = new Intent(MainActivity.this, WordMeaningActivity.class);
Bundle bundle = new Bundle();
bundle.putString(("column1", text);
intent.putExtras(bundle);
startActivity(intent);
}
}
else
{
showAlertDialog();
}
return false;
}
@Override
public boolean onQueryTextChange(final String s) {
search.setIconifiedByDefault(false);
Pattern p = Pattern.compile("[A-Za-züÜöÖőŐűŰáÁéÉíÍóÓúÚ \\-.]{1,25}");
Matcher m = p.matcher(s);
if(m.matches()) {
Cursor cursorSuggestion = myDbHelper.getSuggestions(s);
suggestionAdapter.changeCursor(cursorSuggestion);
}
return false;
}
});}
, и за этим стоит SQL запрос
public Cursor getSuggestions(String text) {
Cursor c= myDatabase.rawQuery("SELECT _id, column1, column2 FROM words WHERE column1 LIKE '"+text+"%' AND column2 LIKE '"+text+"%' LIMIT 40", null);
return c;}
Я думаю, что главная проблема здесь:
final String[] from = new String[] {"column1", "column2"};
, потому что в этом порядке, если я что-то найду, он вернет список column1, но если я изменю порядок с {"column1", "column2"} на {"column2 "," column1 "}, автопредставление покажет только результаты column2. Я понимаю, что я должен что-то сделать с этой строкой:
final int[] to = new int[] {R.id.suggestion_text};
, но я не нашел никакой подробной информации по этому поводу, только решение, в котором столбцы были бы показаны в разных строках, но мне нужны оба результата чтобы показать в одном раскрывающемся списке. Спасибо за ваше время и за чтение!