【问题标题】:Search bar not visible to RecyclerView in Fragment搜索栏在 Fragment 中对 RecyclerView 不可见
【发布时间】:2020-02-14 12:02:51
【问题描述】:

我在 Fragment 的 Recycler 视图中使用搜索栏,但它似乎不是 请帮我。 请帮我。 请帮我。 请帮我。 请帮我。 请帮我。 请帮我。 请帮我。 请帮我。 请帮我。 请帮我。 请帮我。 请帮我。 请帮我。 请帮我。 请帮我。 请帮我。 请帮我。 请帮我。 请帮我。 请帮我。 请帮我。 请帮我。 请帮我。 请帮我。 请帮我。 请帮我。 请帮我。 请帮我。 请帮我。 请帮我。 请帮我。 请帮我。 请帮帮我。

menu.xml

<menu 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"
    tools:context=".HomeActivity">

    <item
        android:id="@+id/action_search"
        android:icon="@android:drawable/ic_menu_search"
        android:title="@string/search"
        app:actionViewClass="androidx.appcompat.widget.SearchView"
        app:showAsAction="always" />

</menu>

这是片段中的java代码并与片段一起使用

fragment.java

package part.time.job.v2;


import android.app.SearchManager;
import android.content.Context;
import android.os.Bundle;

import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import android.os.Parcelable;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.SearchView;
import android.widget.TextView;

import com.google.android.gms.tasks.OnFailureListener;
import com.google.android.gms.tasks.OnSuccessListener;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
import com.google.firebase.firestore.CollectionReference;
import com.google.firebase.firestore.FirebaseFirestore;
import com.google.firebase.firestore.QueryDocumentSnapshot;
import com.google.firebase.firestore.QuerySnapshot;

import java.util.ArrayList;
import java.util.List;

import model.Jobpost;
import ui.JournalRecyclerAdapter;
import ui.JournalRecyclerAdapterEmp;
import util.JournalApi;


/**
 * A simple {@link Fragment} subclass.
 */

    public class ListjobFragment extends Fragment {

        private FirebaseUser user;
        private FirebaseAuth firebaseAuth;
        private FirebaseAuth.AuthStateListener authStateListener;
        private FirebaseFirestore db = FirebaseFirestore.getInstance();
        private List<Jobpost> journalList;
        private RecyclerView recyclerView;
        private Parcelable savedRecyclerLayoutState;
        private JournalRecyclerAdapterEmp journalRecyclerAdapterEmp;

        private CollectionReference collectionReference=db.collection("Employer");
        private TextView noJournalEntry;
        private SearchView searchView = null;
        private SearchView.OnQueryTextListener queryTextListener;

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




        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                 Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);

            // Inflate the layout for this fragment
            View view=inflater.inflate(R.layout.fragment_listjob, container, false);

            firebaseAuth= FirebaseAuth.getInstance();
            user =firebaseAuth.getCurrentUser();

            noJournalEntry= view.findViewById(R.id.no_list);
            journalList=new ArrayList<>();

            recyclerView=view.findViewById(R.id.recyclerView);
           recyclerView.setHasFixedSize(true);
            recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
            return view;
        }




        @Override
        public void onStart() {
            super.onStart();
    //        user= firebaseAuth.getCurrentUser();
    //        firebaseAuth.addAuthStateListener(authStateListener);
            if (journalList!=null){
                journalList.clear();
            }

            collectionReference.document(JournalApi.getInstance().getUserId()).collection("Job Post").whereEqualTo("userId",JournalApi.getInstance().getUserId())
                    .get()
                    .addOnSuccessListener(new OnSuccessListener<QuerySnapshot>() {
                        @Override
                        public void onSuccess(QuerySnapshot queryDocumentSnapshots) {
                            if (!queryDocumentSnapshots.isEmpty()){
                                for (QueryDocumentSnapshot journals: queryDocumentSnapshots){
    //                                Journal journal=journals.toObject(Journal.class);
                                    Jobpost jobpost=journals.toObject(Jobpost.class);
                                    journalList.add(jobpost);

                                }

                                journalRecyclerAdapterEmp = new JournalRecyclerAdapterEmp(getActivity(),journalList);
                                recyclerView.setAdapter(journalRecyclerAdapterEmp);
                                journalRecyclerAdapterEmp.notifyDataSetChanged();

                            }else {

                                noJournalEntry.setVisibility(View.VISIBLE);

                            }
                        }
                    })
                    .addOnFailureListener(new OnFailureListener() {
                        @Override
                        public void onFailure(@NonNull Exception e) {

                        }
                    });

        }

        @Override
        public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
            inflater.inflate(R.menu.menu, menu);
            MenuItem searchItem = menu.findItem(R.id.action_search);
            SearchManager searchManager = (SearchManager) getActivity().getSystemService(Context.SEARCH_SERVICE);

            if (searchItem != null) {
                searchView = (SearchView) searchItem.getActionView();
            }
            if (searchView != null) {
                searchView.setSearchableInfo(searchManager.getSearchableInfo(getActivity().getComponentName()));

                queryTextListener = new SearchView.OnQueryTextListener() {
                    @Override
                    public boolean onQueryTextChange(String newText) {
                        Log.i("onQueryTextChange", newText);

                        return true;
                    }
                    @Override
                    public boolean onQueryTextSubmit(String query) {
                        Log.i("onQueryTextSubmit", query);

                        return true;
                    }
                };
                searchView.setOnQueryTextListener(queryTextListener);
            }
            super.onCreateOptionsMenu(menu, inflater);
        }

        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
            switch (item.getItemId()) {
                case R.id.action_search:
                    // Not implemented here
                    return false;
                default:
                    break;
            }
            searchView.setOnQueryTextListener(queryTextListener);
            return super.onOptionsItemSelected(item);
        }



    }

【问题讨论】:

  • 你在哪里膨胀 recyclerview 我们在你的片段类中没有看到任何 recyclerview
  • 对不起,我忘记了,但现在我已经编辑过了。 @sashabeliy
  • 能否请您删除“请帮助我”垃圾邮件或用有用的信息替换它。

标签: android android-recyclerview menu searchview searchbar


【解决方案1】:

把它放在你的代码中,你就会得到你的 searchBar:

@Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setHasOptionsMenu(true);
    }

基本上在片段中,显示我们必须使用“setHasOptionsMenu”的菜单项。

【讨论】:

  • 出现错误 E/AndroidRuntime: FATAL EXCEPTION: main Process: part.time.job.v2, PID: 5832 java.lang.ClassCastException: androidx.appcompat.widget.SearchView 无法转换为 android。 widget.SearchView at part.time.job.v2.ListjobFragment.onCreateOptionsMenu(ListjobFragment.java:143)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多