【问题标题】:I want to search and create listview inside viewpager how it is possible我想在 viewpager 中搜索和创建 listview 怎么可能
【发布时间】:2019-05-31 05:25:02
【问题描述】:

我想从活动中搜索并根据片段内的搜索结果创建列表( 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(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);
}

我在片段内得到 ListView 的空指针异常。

【问题讨论】:

标签: android listview search android-viewpager


【解决方案1】:

尝试使用EditText,而不是使用SearchView。给它添加一个 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
                                }
                            });

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-07
    • 2021-12-16
    • 1970-01-01
    • 1970-01-01
    • 2018-04-10
    • 1970-01-01
    相关资源
    最近更新 更多