【问题标题】:SearchQueryListener returns no resultsSearchQueryListener 不返回任何结果
【发布时间】:2020-10-03 16:10:37
【问题描述】:

我使用 ListView 和 JSON 制作了一个新闻应用程序。我想向我的应用程序添加搜索功能。所以 Ihaave 已经在操作栏中显示了我的搜索栏。问题是每当我单击搜索时,我的 ListView 结果就会消失,而我搜索的单词不会产生任何结果。我正在发布我的一个片段的代码。 (我已经通过设置日志消息检查了搜索栏的工作情况,我在日志消息中看到了这一点。但是当涉及到我的列表视图时,它没有显示任何结果。也许我的适配器是空的?或者我在某处缺少我的列表视图。请帮助我.

这里是代码。

public class Uspolitics extends Fragment implements LoaderManager.LoaderCallbacks<List<News>> {


private static final String LOG_TAG = Uspolitics.class.getSimpleName();


private static final String NEWS_API = "https://newsapi.org/v2/top-headlines?country=us&apiKey=6a6f7c77766442acb20c86157a152131";
private NewsAdapter mAdapter;
private static final int EARTHQUAKE_LOADER_ID = 1;
private TextView mEmptyStateTextView;
private ProgressBar progressSpinner;
private String mUrl;

public Uspolitics() {
    // Required empty public constructor
}


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment

    View rootView = inflater.inflate(R.layout.activity_all, container, false);

    setHasOptionsMenu(true);

    mEmptyStateTextView = rootView.findViewById(R.id.empty_view);
    final ListView listView = (ListView) rootView.findViewById(R.id.list);
    listView.setEmptyView(mEmptyStateTextView);

    mAdapter = new NewsAdapter(getActivity(), new ArrayList<News>());


    listView.setAdapter(mAdapter);


    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            News currentNews = mAdapter.getItem(position);

            Uri uriweb = Uri.parse(currentNews.getURL());
            Intent webIntent = new Intent(Intent.ACTION_VIEW, uriweb);
            startActivity(webIntent);


        }
    });


    progressSpinner = rootView.findViewById(R.id.loading_indicator);
    // Indeterminate progress bar type
    progressSpinner.setIndeterminate(true);


    ConnectivityManager connMgr = (ConnectivityManager) getActivity().getSystemService(Context.CONNECTIVITY_SERVICE);

    if (getActivity() != null) {

        if (connMgr != null) {
            // Get details on the currently active default data network
            NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();
            if (networkInfo != null && networkInfo.isConnected()) {
                LoaderManager loaderManager = getActivity().getSupportLoaderManager();
                loaderManager.initLoader(EARTHQUAKE_LOADER_ID, null, this);


            } else {


                progressSpinner.setVisibility(ProgressBar.GONE);

                mEmptyStateTextView.setText("NO INTERNET CONNECTION");
            }


        }
    }


    return rootView;

}


@Override
public Loader<List<News>> onCreateLoader(int i, Bundle bundle) {


    return new PoliticsLoader(getContext(), NEWS_API);

}

@Override
public void onLoadFinished(Loader<List<News>> loader, List<News> news) {

    progressSpinner.setVisibility(ProgressBar.GONE);
    mAdapter.clear();
    if (news != null && !news.isEmpty()) {
        mAdapter.addAll(news);
    }

}

@Override
public void onLoaderReset(Loader<List<News>> loader) {
    mAdapter.clear();


}

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {

    // Inflate the options menu from XML
    MenuInflater inflaters = getActivity().getMenuInflater();
    inflater.inflate(R.menu.dashboard, menu);

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



    searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
        @Override
        public boolean onQueryTextSubmit(String s) {

            mAdapter.getFilter().filter(s); // **I think this is issue** 
            return true;

        }

        @Override
        public boolean onQueryTextChange(String s) {
            return true;
        }
    });
    super.onCreateOptionsMenu(menu, inflater);
}

}

【问题讨论】:

    标签: android json android-actionbar searchview


    【解决方案1】:

    点击提交按钮后,需要再次请求 API。

    我认为,您应该使用 RecyclerView 而不是 ListView,并且还应该使用 Volley 或 Retrofit for Rest API。

    【讨论】:

    • 您好穆斯塔法感谢您的回答。我是初学者。回收商的观点对我来说真的很吓人。有什么方法可以使用我当前的代码。我是否缺少意图?
    猜你喜欢
    • 2017-12-28
    • 2017-12-09
    • 2017-03-19
    • 2017-05-20
    • 2012-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多