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

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

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

Отследить закрытие SearchView Android - Android

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

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

Android SearchView или своя реализация поиска (UI)
Android Откуда берутся атрибуты android:layout_width и android:layout_height в элементе LinearLayout?
Закрытие приложения эклипс android Android
Android NDK. Как пользоваться? Когда стоит использовать его вместо Android SDK? Android
Android Android studio, как запускать программу сразу на android смартфоне подключенному к usb?
Поиск в ListView с помощью SearchView Android
Searchview закрыть поиск программно, также как закрывается кнопкой back Android
Android Searchview в toolbar
Как отследить закрытие/открытие drawer-а в другом фрагменте? Android
Android Передать SearchView из активити во фрагмент
Как добавить динамически в ToolBar виджет SearchView в нужных фрагментах Android
Android SearchView в ActionBar

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
CoolMind
418 / 401 / 65
Регистрация: 06.10.2012
Сообщений: 1,723
12.03.2016, 10:25     Отследить закрытие SearchView Android #2
TigRon4ik, вообще, реализаций поиска в ActionBar, ToolBar очень много. Тот способ, который вы предлагаете, я не использовал, обычно эта кнопка служит для завершения активности. Можно, например, использовать крестик справа для очистки и закрытия SearchView. Ссылку на пример могу дать.
TigRon4ik
2 / 2 / 0
Регистрация: 10.08.2015
Сообщений: 13
12.03.2016, 10:35  [ТС]     Отследить закрытие SearchView Android #3
В том то и дело что эту "кнопку" я не вызываю(точнее не отображаю), она появляется автоматически при нажатии на "лупу", и крестик появляется только когда в TextEdit'e ввожу текст, и тот отвечает только за то чтобы стереть этот самый текст
CoolMind
418 / 401 / 65
Регистрация: 06.10.2012
Сообщений: 1,723
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
Сообщений: 13
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
Сообщений: 13
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
Ответ Создать тему
Опции темы

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