我想在viewpager中搜索并创建listview

时间:2019-05-31 05:25:03

标签: android listview search android-viewpager

我想从活动中搜索并根据片段内的搜索结果(在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 :(得分:0)

尝试使用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
                                }
                            });
  

不需要接口,因为您可以通过片段访问活动中的方法。