SearchView.SetQuery () не работает при вызове из onActivityResult сканера штрих-кода - PullRequest
0 голосов
/ 24 апреля 2019

Я использую сканер штрих-кода zxing , чтобы отсканировать код и попытаться получить результат и поместить его в searchView и отфильтровать recyclerView.

Отсканированный код появляется внутри searchView, и событие onQueryTextChange запускается, но фильтрация не происходит. Когда я печатаю прямо в searchView, все работает хорошо. Что я делаю не так?

Честное предупреждение, я действительно новичок в этом, так что будьте спокойны со мной.

Заранее спасибо

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.menu_search_scanner, menu);

    MenuItem itemSearch = menu.findItem(R.id.action_search);
    searchView = (SearchView) itemSearch.getActionView();

    mSearchMenu = itemSearch;

    ImageView closeButton = searchView.findViewById(R.id.search_close_btn);

    searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
        @Override
        public boolean onQueryTextSubmit(String query) {
            return false;
        }

        @Override
        public boolean onQueryTextChange(String newText) {
            zoneProductsRvAdapter.getFilter().filter(newText);
            return true;
        }
    });

    closeButton.setOnClickListener(new View.OnClickListener() {

      @Override
       public void onClick(View v) {
           //Find EditText view
            EditText et = findViewById(R.id.search_src_text);

            //Clear the text from EditText view
           et.setText("");

            //Clear query
            searchView.setQuery("", false);
            //Collapse the action view
            searchView.onActionViewCollapsed();
            //Collapse the search widget
            mSearchMenu.collapseActionView();

       }

    });

    return true;
}

@Override
public boolean onOptionsItemSelected (MenuItem item) {
    int id = item.getItemId();
    if (id == R.id.itemScanner){
        IntentIntegrator integrator = new IntentIntegrator(ZoneProductsActivity.this);
        integrator.setDesiredBarcodeFormats(IntentIntegrator.ALL_CODE_TYPES);
        integrator.setPrompt("Scan");
        integrator.setCameraId(0);
        integrator.setBeepEnabled(false);
        integrator.setBarcodeImageEnabled(false);
        integrator.setOrientationLocked(true);
        integrator.initiateScan();

        return true;
    }
    return super.onOptionsItemSelected(item);
}


@Override
public void onActivityResult ( int requestCode, int resultCode, Intent data){
    switch (requestCode) {
        case 49374:
            IntentResult result = IntentIntegrator.parseActivityResult(requestCode,  resultCode, data);
            if (result != null){
                if (result.getContents() != null){
                    String ScannedCode = result.getContents();
                    searchView.onActionViewExpanded();
                    searchView.setIconified(false);
                    searchView.setQuery(ScannedCode, false);
                    searchView.clearFocus();

                }
            }
            break;
    }
}
...