0

I want to search from activity and create list on the basis of search result inside the fragment ( In View Pager ).

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

Fragment

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);
    }
}

Acitivty

 @Override

public boolean onCreateOptionsMenu(Menu menu) {

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);
}

I am getting null pointer exception for ListView inside fragment.

1 Answers1

0

Instead of using a SearchView try to use the EditText. Add a TextWatcher to it..

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));
            }
        });

    }

Create a method and use this method in a fragment.

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

In fragment

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

There's no need of an interface as you can access the methods from an activity through a fragment.

sanjeev
  • 1,664
  • 19
  • 35