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

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

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

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

12.03.2016, 10:07. Просмотров 357. Ответов 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
Просмотров: 23

Размер: 2.4 Кб
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.03.2016, 10:07     Отследить закрытие SearchView Android
Посмотрите здесь:

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

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

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

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

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

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

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

Скрыть тулбар у 1 фрагмента Tabbed Activity + toolbar + Searchview - Программирование Android
есть Tabbed Activity У неё тулбар в нем SearchView/ в Tabbed Activity 2 фрагмента. в 1 поиск не нужен во втором нужен. как сделать...

Как добавить динамически в ToolBar виджет SearchView в нужных фрагментах - Программирование Android
У меня есть Toolbar в MainActivity и нужно получить доступ к этому ToolBar во фрагменте MainActivity и добавить туда SearchView. Как такое...

Searchview закрыть поиск программно, также как закрывается кнопкой back - Программирование Android
Осуществляется поиск по списку listview, нужно при клике на элемент списка, чтобы закрывался поиск, также как он закрывается при нажатии ...

Навигатор - отследить сход с маршрута - Программирование Android
Всем привет, меня интересует вот что. Как нарисовать маршрут я нагуглил, примерно, но вот как мне отследить сход с этого маршрута?

Отследить изменение текстового поля - Программирование Android
Добрый день. Прошу помощи. Как отслеживать изменение текстового поля (EditText). Предположим, я ввожу какое-нибудь число в...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
CoolMind
418 / 401 / 65
Регистрация: 06.10.2012
Сообщений: 1,724
12.03.2016, 10:25     Отследить закрытие SearchView Android #2
TigRon4ik, вообще, реализаций поиска в ActionBar, ToolBar очень много. Тот способ, который вы предлагаете, я не использовал, обычно эта кнопка служит для завершения активности. Можно, например, использовать крестик справа для очистки и закрытия SearchView. Ссылку на пример могу дать.
TigRon4ik
2 / 2 / 0
Регистрация: 10.08.2015
Сообщений: 16
12.03.2016, 10:35  [ТС]     Отследить закрытие SearchView Android #3
В том то и дело что эту "кнопку" я не вызываю(точнее не отображаю), она появляется автоматически при нажатии на "лупу", и крестик появляется только когда в TextEdit'e ввожу текст, и тот отвечает только за то чтобы стереть этот самый текст
CoolMind
418 / 401 / 65
Регистрация: 06.10.2012
Сообщений: 1,724
12.03.2016, 12:10     Отследить закрытие SearchView Android #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();
            // Вызов поиска по строке.
        }
    }
TigRon4ik
2 / 2 / 0
Регистрация: 10.08.2015
Сообщений: 16
12.03.2016, 12:26  [ТС]     Отследить закрытие SearchView Android #5
Спасибо, вечером посмотрю. Почему я сразу не додумался проверять так незнаю
Java
1
2
3
case android.R.id.
    finish(); // Здесь ваши действия.
    return true;
нужно будет попробовать
TigRon4ik
2 / 2 / 0
Регистрация: 10.08.2015
Сообщений: 16
16.03.2016, 23:48  [ТС]     Отследить закрытие SearchView Android #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
кстати тоже не срабатывает
Yandex
Объявления
16.03.2016, 23:48     Отследить закрытие SearchView Android
Ответ Создать тему
Опции темы

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