Как реализовать searchview - PullRequest
       4

Как реализовать searchview

0 голосов
/ 03 февраля 2020

Мне нужно реализовать SearchView. Моя лента новостей настраивается через CardView и RecyclerView. Я также использовал залп и JSON, чтобы создать эффект. Я довольно новичок в разработке android, и я хочу иметь возможность искать и фильтровать активность JSON, но я не знаю, как это сделать. Некоторые учебники сложны, потому что они использовали RESTAPI.

Можно ли получить образец кода и / или некоторые инструкции для go вместе с ним, пожалуйста?

  public void onResponse(JSONObject response) {

            try {
                JSONArray jsonArray =response.getJSONArray("articles");

                for (int i = 0; i< jsonArray.length(); i++){
                    JSONObject article = jsonArray.getJSONObject(i);

                    String authorName = article.getString("author");
                    String imageUrl = article.getString("urlToImage");
                    String published = article.getString("publishedAt");
                    String description = article.getString("content");
                    String headline = article.getString("title");

                    mNewsList.add(new newsItem(imageUrl, authorName, published,description, headline ));

                }

                mNewsAdapter = new newsAdapter (news.this,mNewsList);
                mRecyclerView.setAdapter(mNewsAdapter);

                //calling onItemClick

                mNewsAdapter.setOnItemClickListener(news.this);


            } catch (JSONException e) {
                e.printStackTrace();
            }

        }
    }, new Response.ErrorListener(){

        public void  onErrorResponse(VolleyError error){

            error.printStackTrace();
        }
    });

    mRequestQueue.add(request);
}

1 Ответ

0 голосов
/ 03 февраля 2020

Android предоставляет класс Filterable для фильтрации данных по фильтру (условие). Обычно метод getFilter () должен быть переопределен в классе адаптера, в котором предоставляется условие фильтра для поиска в списке.

Примечание: Создать класс модели для фильтрации объектов

@Override
    public Filter getFilter() {
        return new Filter() {
            @Override
            protected FilterResults performFiltering(CharSequence charSequence) {
                String charString = charSequence.toString();
                if (charString.isEmpty()) {
                    contactListFiltered = contactList;
                } else {
                    List<Contact> filteredList = new ArrayList<>();
                    for (Contact row : contactList) {

                        // name match condition. this might differ depending on your requirement
                        // here we are looking for name or phone number match
                        if (row.getName().toLowerCase().contains(charString.toLowerCase()) || row.getPhone().contains(charSequence)) {
                            filteredList.add(row);
                        }
                    }

                    contactListFiltered = filteredList;
                }

                FilterResults filterResults = new FilterResults();
                filterResults.values = contactListFiltered;
                return filterResults;
            }

            @Override
            protected void publishResults(CharSequence charSequence, FilterResults filterResults) {
                contactListFiltered = (ArrayList<Contact>) filterResults.values;

                // refresh the list with filtered data
                notifyDataSetChanged();
            }
        };
    }

Откройте AndroidManifest. xml и настройте поиск, как показано ниже.

        <activity
            android:name="YourActivity">
            <meta-data
                android:name="android.app.searchable"
                android:resource="@xml/searchable" />
            <intent-filter>
                <action android:name="android.intent.action.SEARCH" />
            </intent-filter>
        </activity>

res ⇒ xml папка - откройте доступный для поиска. xml (Если папка xml не существует, создайте новую 1) и настройте поиск, как показано ниже.

<?xml version="1.0" encoding="utf-8"?>
<searchable xmlns:android="http://schemas.android.com/apk/res/android"
    android:hint="@string/search_hint"
    android:label="@string/app_name" />

Панель инструментов установки в файле макета

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="info.androidhive.recyclerviewsearch.MainActivity">

    <android.support.design.widget.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/AppTheme.AppBarOverlay">

        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:background="@android:color/white"
            app:popupTheme="@style/AppTheme.PopupOverlay" />

    </android.support.design.widget.AppBarLayout>

    <include layout="@layout/content_main" />

</android.support.design.widget.CoordinatorLayout>
...