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

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

Войти
Регистрация
Восстановить пароль
 
TigRon4ik
2 / 2 / 0
Регистрация: 10.08.2015
Сообщений: 16
#1

Отследить закрытие SearchView Android - Программирование Android

12.03.2016, 10:07. Просмотров 409. Ответов 5

Подскажите пожалуйста, как отследить закрытие SearchView, производится нажатием на стрелку.Но отследить это нажатие не получается, использую этот листенер.
Java
1
2
3
4
5
6
7
 toolbar.setNavigationOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            startMode(Mode.NORMAL);
            Log.d(LOG_TAG, "Really?");
        }
    });
На OnCloseListener у SearchView тоже не срабатывает... может что не так делаю?
Название: RdgkJ.png
Просмотров: 26

Размер: 2.4 Кб
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.03.2016, 10:07
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Отследить закрытие SearchView Android (Программирование Android):

Как отследить закрытие/открытие drawer-а в другом фрагменте? - Программирование Android
Всем привет! У меня в приложении есть drawer при переходе по какому то пункту открывается определенный фрагмент. Так вот как мне...

Закрытие приложения эклипс android - Программирование Android
Доброго времени суток если в метод в java который закрывает полность приложение но именно не сваричивает а полнастью закрывает!!!

Searchview в toolbar - Программирование Android
Доброго времени суток уважаемые форумчане. Нужна Ваша помощь в реализации поиска. Есть несколько фрагментов, и searchview в toolbar-е...

SearchView в ActionBar - Программирование Android
Всем привет! Добавил в ActionBar фрагмента SearchView, но он не появляется, пустой ActionBar. С добавлением SearchView в ActionBar активити...

SearchView ругается на Listener? - Программирование Android
Добрый день! подскажите что ему не нравится: @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate...

Поиск в ListView с помощью SearchView - Программирование Android
Прикручиваю SearchView, чтобы фильтровать ListView: MenuItem ourSearchItem = menu.findItem(R.id.menu_item_search); ...

5
CoolMind
419 / 402 / 65
Регистрация: 06.10.2012
Сообщений: 1,727
12.03.2016, 10:25 #2
TigRon4ik, вообще, реализаций поиска в ActionBar, ToolBar очень много. Тот способ, который вы предлагаете, я не использовал, обычно эта кнопка служит для завершения активности. Можно, например, использовать крестик справа для очистки и закрытия SearchView. Ссылку на пример могу дать.
0
TigRon4ik
2 / 2 / 0
Регистрация: 10.08.2015
Сообщений: 16
12.03.2016, 10:35  [ТС] #3
В том то и дело что эту "кнопку" я не вызываю(точнее не отображаю), она появляется автоматически при нажатии на "лупу", и крестик появляется только когда в TextEdit'e ввожу текст, и тот отвечает только за то чтобы стереть этот самый текст
0
CoolMind
419 / 402 / 65
Регистрация: 06.10.2012
Сообщений: 1,727
12.03.2016, 12:10 #4
TigRon4ik, в общем, не знаю, правильно или нет думаю, пока накидаю вам часть своего кода, а вы уж разбирайтесь. Я бы проверял нажатие на стрелку и состояние поиска (открыт или закрыт), в зависимости от этого выставлял бы новое состояние поиска.
Пусть есть меню с поисковой строкой (оно у вас есть):
Кликните здесь для просмотра всего текста

XML
1
2
3
4
5
6
7
8
9
10
11
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    tools:context=".ui.MainActivity">
 
    <item
        android:id="@+id/action_search"
        android:icon="@drawable/ic_action_search"
        android:orderInCategory="100"
        android:showAsAction="collapseActionView|ifRoom"
        android:title="@string/action_search" />
</menu>

Тогда в активности надо прописать:
Кликните здесь для просмотра всего текста
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
    private MenuItem searchAction;
    private boolean isSearchOpen;
    private EditText etSearch;
    private String searchQuery;
 
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        if (savedState == null) {
            isSearchOpen = false;
            searchQuery = "";
        } else {
            isSearchOpen = savedState.getBoolean(SEARCH_OPEN);
            searchQuery = savedState.getString(SEARCH_QUERY);
        }
    }
 
    @Override
    protected void onResume()
    {
        super.onResume();
 
        // If the search bar was opened previously, open it on recreate.
        handleMenuSearch(!isSearchOpen);
    }
 
    @Override
    protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        outState.putBoolean(SEARCH_OPEN, isSearchOpen);
        outState.putString(SEARCH_QUERY, searchQuery);
    }
 
    @Override
    public boolean onPrepareOptionsMenu(Menu menu) {
        searchAction = menu.findItem(R.id.action_search);
        return super.onPrepareOptionsMenu(menu);
    }
 
    @Override
    public boolean onOptionsItemSelected(MenuItem item)
    {
        switch (item.getItemId())
        {
            case android.R.id.home:
                finish(); // Здесь ваши действия.
                return true;
            case R.id.action_search:
                handleMenuSearch(isSearchOpen);
                return true;
        }
        return super.onOptionsItemSelected(item);
    }
 
    private void handleMenuSearch(boolean searchOpen) {
        if (searchOpen) {
            closeSearchBar();
        } else {
            openSearchBar(searchQuery);
        }
    }
 
    private void openSearchBar(String queryText) {
        // Set custom view on action bar.
        final ActionBar actionBar = getActionBar();
        actionBar.setDisplayShowCustomEnabled(true);
        actionBar.setCustomView(R.layout.search_bar);
 
        iconOpenSearch = ContextCompat.getDrawable(this, R.drawable.ic_action_search);
        iconCloseSearch = ContextCompat.getDrawable(this, R.drawable.ic_action_close);
 
        // Search edit text field setup.
        etSearch = (EditText) actionBar.getCustomView().findViewById(R.id.search);
        etSearch.setText(queryText);
        etSearch.requestFocus();
        etSearch.addTextChangedListener(new SearchWatcher());
 
        // Change search icon accordingly.
        if (searchAction != null)
            searchAction.setIcon(iconCloseSearch);
        isSearchOpen = true;
 
        // Show soft keyboard.
        showSoftKeyboard(true);
    }
 
    private void closeSearchBar() {
        // Remove custom view.
        getActionBar().setDisplayShowCustomEnabled(false);
 
        // Change search icon accordingly.
        if (searchAction != null)
            searchAction.setIcon(iconOpenSearch);
        isSearchOpen = false;
        // Clear search text.
        if (etSearch != null)
            etSearch.setText("");
 
        // Hide soft keyboard.
        showSoftKeyboard(false);
    }
 
    private void showSoftKeyboard(boolean visible) {
        final InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
        if (visible) {
            imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_IMPLICIT_ONLY);
        } else {
            View view = this.getCurrentFocus();
            if (view == null) {
                view = etSearch;
            }
            if (view != null) {
                imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
            }
        }
    }
 
    /**
     * Responsible for handling changes in search edit text.
     */
    private class SearchWatcher implements TextWatcher {
        @Override
        public void beforeTextChanged(CharSequence c, int i, int i2, int i3) {
        }
 
        @Override
        public void onTextChanged(CharSequence c, int i, int i2, int i3) {
        }
 
        @Override
        public void afterTextChanged(Editable editable) {
            searchQuery = etSearch.getText().toString();
            // Вызов поиска по строке.
        }
    }
0
TigRon4ik
2 / 2 / 0
Регистрация: 10.08.2015
Сообщений: 16
12.03.2016, 12:26  [ТС] #5
Спасибо, вечером посмотрю. Почему я сразу не додумался проверять так незнаю
Java
1
2
3
case android.R.id.
    finish(); // Здесь ваши действия.
    return true;
нужно будет попробовать
0
TigRon4ik
2 / 2 / 0
Регистрация: 10.08.2015
Сообщений: 16
16.03.2016, 23:48  [ТС] #6
что я делаю не так я не знаю
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
import android.support.v7.app.ActionBarActivity;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.SearchView;
import android.support.v7.widget.Toolbar;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
 
public class MainActivity extends ActionBarActivity implements SearchView.OnQueryTextListener, SearchView.OnCloseListener {
    private  SearchView searchView;
    private MenuItem searchItem;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar mActionBarToolbar = (Toolbar) findViewById(R.id.toolbar_actionbar);
        setSupportActionBar(mActionBarToolbar);
    }
 
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu_main, menu);
 
        searchItem = menu.findItem(R.id.action_search);
        searchView = (SearchView) searchItem.getActionView();
        searchView.setOnQueryTextListener(this);
        searchView.setOnCloseListener(this);
        searchView.setSubmitButtonEnabled(false);
        searchView.setIconifiedByDefault(false);
 
        return super.onCreateOptionsMenu(menu);
    }
 
    @Override
    public boolean onQueryTextSubmit(String query) {
        Log.d("TAGI","onQueryTextSubmit");
        return false;
    }
 
    @Override
    public boolean onQueryTextChange(String newText) {
        Log.d("TAGI","onQueryTextChange:"+newText);
        return false;
    }
 
    @Override
    public boolean onClose() {
        Log.d("TAGI","onClose");
        return false;
    }
при нажатии на стрелку не срабатывает onClose() может он и не должен срабатывать?

Java
1
2
3
case android.R.id.
 finish(); // Здесь ваши действия.
 return t
кстати тоже не срабатывает
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.03.2016, 23:48
Привет! Вот еще темы с ответами:

Спрятать SearchView в некоторых фрагментах - Программирование Android
Всем привет, такой вопрос: Есть NavigationDrawer В одном фрагменте реализован viewPager , там 2 фрагмента и в каждом searchView в...

Передать SearchView из активити во фрагмент - Программирование Android
У меня есть SearchView в активити и тесть фрагмент который запускается через транзакцию. И как мне правильно передать SearchView из...

SearchView или своя реализация поиска (UI) - Программирование Android
Требуется реализовать интерфейс для поиска. В ActionBar имеется SearchView, который отправляет запрос на сервер, после этого приходит...

Приложение крашится при попытке инициализировать searchview - Программирование Android
Кто может подсказать, что я делаю не правильно Приложение рушится на попытке инициализировать элемент SearchView на вот этой строчке ...


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

Или воспользуйтесь поиском по форуму:
6
Yandex
Объявления
16.03.2016, 23:48
Ответ Создать тему
Опции темы

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