Я хочу найти и создать просмотр списка внутри viewpager, как это возможно - PullRequest
0 голосов
/ 31 мая 2019

Я хочу выполнить поиск по активности и создать список на основе результатов поиска внутри фрагмента (In View Pager).

public interface SearchImpl {
      public void searchQuery(String val);
}

Фрагмент

public class MyFragment extends Fragment implements SearchImpl {

    View view;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
         view = inflater.inflate(R.layout.fragment_almanca, container, false);
        return view;
    }

    @Override
    public void searchQuery(String val) {
       Log.e("getted", val);
    }
}

Активность

 @Override

public boolean onCreateOptionsMenu (Меню меню) {

getMenuInflater().inflate(R.menu.main, menu);

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

searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
    @Override
    public boolean onQueryTextSubmit(String query) {
        Log.e("setted", "" + query);
        try {
            MyFragment myFGM=new MyFragment();
            myFGM.searchQuery(query);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return false;
    }

    @Override
    public boolean onQueryTextChange(String newText) {
        return false;
    }
});
return super.onCreateOptionsMenu(menu);
}

Я получаю исключение нулевого указателя для ListView внутри фрагмента.

1 Ответ

0 голосов
/ 31 мая 2019

Вместо использования SearchView попробуйте использовать EditText. Добавьте к нему TextWatcher ..

private TextWatcherListener watcherListener;

edittext.addTextChangedListener(new TextWatcher() {
            @Override
            public void afterTextChanged(Editable s) {
            }

            @Override
            public void beforeTextChanged(CharSequence s, int start,
                                          int count, int after) {
            }

            @Override
            public void onTextChanged(CharSequence s, int start,
                                      int before, int count) {
                    watcherListener.onEditBoxEdited(String.valueOf(s));
            }
        });

    }

Создайте метод и используйте этот метод во фрагменте.

public void setWatcherListener(TextWatcherListener listener) {
        watcherListener = listener;
    }

В fragment

((ActivityName) getActivity()).setWatcherListener(new TextWatcherListener() {
                                @Override
                                public void onEditBoxEdited(String value) {
                                    //Do something with value
                                }
                            });

Нет необходимости в интерфейсе, поскольку вы можете получить доступ к методам из действия через фрагмент.

...