Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

onQueryTextChange triggered after app resume

I am stumbed with animated searchview onQueryTextListener. When activity and fragment created first it works nice. Then I press home button, open other apps, do some work there to wipe the data of searchview activity and then return to the app. And when activity and fragment resume onQueryTextChange method is triggered by it's own. I tried this issue Fragment replacement triggers onQueryTextChange on searchview but it did not help, helps only when searchview SHOW_AS_ACTION_NEVER, but in this case I can not see searchview. How to prevent self-triggering of OnQueryTextListener? Snippet from fragment

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {

    searchView = new SearchView(getSherlockActivity().getSupportActionBar()
            .getThemedContext());
    searchView.setOnQueryTextListener(new OnQueryTextListener() {

        @Override
        public boolean onQueryTextSubmit(String query) {
            // TODO Auto-generated method stub
            return false;
        }

        @Override
        public boolean onQueryTextChange(String newText) {
            if (newText.length() > 0) {

                fpAdapter.getFilter().filter(newText);
            } else {

                loadData();

            }
            return false;
        }
    });

    TextView searchText = (TextView) searchView
            .findViewById(R.id.abs__search_src_text);
    searchText.setTextColor(Color.WHITE);

    searchText.setCursorVisible(false);

    ImageView searchButton = (ImageView) searchView
            .findViewById(R.id.abs__search_button);
    searchButton.setImageResource(R.drawable.search_menu_button);
    LinearLayout searchEditFrame = (LinearLayout) searchView
            .findViewById(R.id.abs__search_edit_frame);
    searchEditFrame.setBackgroundResource(android.R.color.transparent);

    View searchPlate = searchView.findViewById(R.id.abs__search_plate);
    searchPlate.setBackgroundColor(Color.argb(0, 0, 0, 0));
    menu.add("Search")

    .setActionView(searchView)
            .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);

    final MenuItem searchMenuItem = menu.getItem(0);
    final Animation in = AnimationUtils.loadAnimation(getSherlockActivity()
            .getApplicationContext(), R.anim.search_in);
    final Animation out = AnimationUtils.loadAnimation(
            getSherlockActivity().getApplicationContext(),
            R.anim.search_out);
    searchView.setQueryHint(getResources().getText(
            R.string.search_messages_hint));
    searchView.setIconifiedByDefault(true);
    searchView
            .setOnQueryTextFocusChangeListener(new View.OnFocusChangeListener() {
                @Override
                public void onFocusChange(View view,
                        boolean queryTextFocused) {

                    if (!queryTextFocused) {

                        // searchView.startAnimation(out);
                        searchMenuItem.collapseActionView();
                    } else {
                        searchView.startAnimation(in);

                    }
                }
            });

    super.onCreateOptionsMenu(menu, inflater);
}

Update: This appears only in HTC sensation XL with Android 4.0.3, on 4.2 I don't see this problem.

like image 688
Alex Shcherbyna Avatar asked Aug 12 '14 19:08

Alex Shcherbyna


1 Answers

Found the only one solution - set listener in onResume:

@Override
public void onResume() {

    super.onResume();

    searchView.setOnQueryTextListener(new OnQueryTextListener() {

    @Override
    public boolean onQueryTextSubmit(String query) {
        // TODO Auto-generated method stub
        return false;
    }

    @Override
    public boolean onQueryTextChange(String newText) {
        if (newText.length() > 0) {

            fpAdapter.getFilter().filter(newText);
        } else {

            loadData();

        }
        return false;
    }
}); }
like image 134
Alex Shcherbyna Avatar answered Sep 28 '22 12:09

Alex Shcherbyna