Android fragments 搜索包含Recyclerview的片段

Android fragments 搜索包含Recyclerview的片段,android-fragments,android-recyclerview,android-adapter,android-search,Android Fragments,Android Recyclerview,Android Adapter,Android Search,我有3个碎片,他们都拿着一个回收视图。但是我不知道应该如何调用adapter.getFilter().filter(newText)在onQueryTextChange中。有什么想法吗 主要活动: public class MainActivity extends AppCompatActivity { DatabaseHelper myDB; private BottomNavigationView bottomNavigationView; RecyclerView recyclerVi

我有3个碎片,他们都拿着一个回收视图。但是我不知道应该如何调用
adapter.getFilter().filter(newText)
onQueryTextChange
中。有什么想法吗

主要活动:

public class MainActivity extends AppCompatActivity {

DatabaseHelper myDB;

private BottomNavigationView bottomNavigationView;
RecyclerView recyclerView;

@Override
protected void onCreate(Bundle savedInstanceState) {
    myDB = new DatabaseHelper(this);
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    //----Start Bottom Navigation Bar
    bottomNavigationView = findViewById(R.id.bottom_navigation);
    bottomNavigationView.setOnNavigationItemSelectedListener(bottomNavMethod);
    getSupportFragmentManager().beginTransaction().replace(R.id.container, new PasswortFragment()).commit();

    String id = getResources().getResourceEntryName(bottomNavigationView.getId());
    //----End Bottom Navigation Bar
}


@Override
public boolean onOptionsItemSelected(MenuItem item) {
    int id = item.getItemId();
    return true;
}

private BottomNavigationView.OnNavigationItemSelectedListener bottomNavMethod =
        new BottomNavigationView.OnNavigationItemSelectedListener() {
    @Override
    public boolean onNavigationItemSelected(@NonNull MenuItem item) {

        Fragment fragment = null;
        switch(item.getItemId()){
            case R.id.passwoerter:
                fragment = new PasswortFragment();
                break;
            case R.id.bankdaten:
                fragment = new BankdatenFragment();
                break;
            case R.id.kreditkarten:
                fragment = new KreditkartenFragment();
                break;
        }
        getSupportFragmentManager().beginTransaction().replace(R.id.container, fragment).commit();
        return true;
    }
};

@Override
public void onBackPressed() {
    super.onBackPressed();

    Fragment f = MainActivity.this.getSupportFragmentManager().findFragmentById(R.id.container);
    if(f instanceof PasswortFragment)
        recyclerView = findViewById(R.id.recyclerViewPasswoerter);
    if(f instanceof KreditkartenFragment)
        recyclerView = findViewById(R.id.recyclerViewKreditkarten);
    if(f instanceof BankdatenFragment)
        recyclerView = findViewById(R.id.recyclerViewBankdaten);

}

@Override
public boolean onCreateOptionsMenu(@NonNull Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.menu, menu);


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

    searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
        @Override
        public boolean onQueryTextSubmit(String query) {
            return false;
        }

        @Override
        public boolean onQueryTextChange(String newText) {
            recyclerView.getAdapter().getFilter().filter(newText);  //<--This is not working
            return false;
        }
    });
    return true;
}
public类MainActivity扩展了AppCompatActivity{
数据库助手myDB;
私有BottomNavigationView BottomNavigationView;
回收视图回收视图;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
myDB=新数据库助手(此);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//----启动底部导航栏
bottomNavigationView=findViewById(R.id.bottom\u导航);
bottomNavigationView.setOnNavigationItemSelectedListener(bottomNavMethod);
getSupportFragmentManager().beginTransaction().replace(R.id.container,new PasswortFragment()).commit();
字符串id=getResources().getResourceEntryName(bottomNavigationView.getId());
//----底端导航栏
}
@凌驾
公共布尔值onOptionsItemSelected(菜单项项){
int id=item.getItemId();
返回true;
}
私有BottomNavigationView.OnNavigationItemSelectedListener bottomNavMethod=
新建BottomNavigationView.OnNavigationItemSelectedListener(){
@凌驾
公共布尔值onNavigationItemSelected(@NonNull MenuItem item){
片段=空;
开关(item.getItemId()){
案例R.id.passwoerter:
fragment=新的PasswortFragment();
打破
案例R.id.bankdaten:
fragment=新的BankdatenFragment();
打破
案例R.id.kreditkarten:
fragment=新的KreditkartenFragment();
打破
}
getSupportFragmentManager().beginTransaction().replace(R.id.container,fragment.commit();
返回true;
}
};
@凌驾
public void onBackPressed(){
super.onBackPressed();
Fragment f=MainActivity.this.getSupportFragmentManager().findFragmentById(R.id.container);
if(f PasswortFragment的instanceof)
recyclerView=findViewById(R.id.recyclerViewPasswoerter);
if(f KreditkartenFragment实例)
recyclerView=findViewById(R.id.RecyclerViewCreditKarten);
if(f银行日期片段的实例)
recyclerView=findViewById(R.id.recyclerViewBankdaten);
}
@凌驾
公共布尔onCreateOptions菜单(@NonNull菜单){
MenuInflater充气机=getMenuInflater();
充气机。充气(右菜单,菜单);
MenuItem=menu.findItem(R.id.action\u search);
SearchView SearchView=(SearchView)项。getActionView();
searchView.setOnQueryTextListener(新的searchView.OnQueryTextListener(){
@凌驾
公共布尔值onQueryTextSubmit(字符串查询){
返回false;
}
@凌驾
公共布尔onQueryTextChange(字符串newText){
recyclerView.getAdapter().getFilter().filter(新文本)//
public class Adapter extends RecyclerView.Adapter<Adapter.MyViewHolder> implements Filterable{

String type;
List<String> dataAll, data1;
Context context;

public Adapter(Context ct, List<String> s1, String typ){
    context = ct;
    data1 = s1;
    type = typ;
    dataAll = new ArrayList<>(data1);
}

@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    LayoutInflater inflater = LayoutInflater.from(context);
    View view = inflater.inflate(R.layout.reihen, parent, false);
    return new MyViewHolder(view);
}

@Override
public void onBindViewHolder(@NonNull MyViewHolder holder, final int position) {
    holder.mytext1.setText(data1.get(position));
    holder.mainLayout.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if(type.equals("Passwoerter")){
                Intent intent = new Intent(context, DetailsP.class);
                intent.putExtra("data1", data1.get(position));
                context.startActivity(intent);
            } else if(type.equals("Kreditkarten")){
                Intent intent = new Intent(context, DetailsK.class);
                intent.putExtra("data1", data1.get(position));
                context.startActivity(intent);
            } else if(type.equals("Bankdaten")){
                Intent intent = new Intent(context, DetailsB.class);
                intent.putExtra("data1", data1.get(position));
                context.startActivity(intent);
            }

        }
    });
}

@Override
public int getItemCount() {
    return data1.size();
}

@Override
public Filter getFilter() {
    return filter;
}
private Filter filter = new Filter() {
    @Override
    protected FilterResults performFiltering(CharSequence constraint) {
        List<String> filteredList = new ArrayList<>();
        if(constraint == null || constraint.length() == 0){
            filteredList.addAll(dataAll);
        } else {
            String filterPattern = constraint.toString().toLowerCase().trim();
            for(String item: dataAll){
                if(item.toLowerCase().contains(filterPattern)){
                    filteredList.add(item);
                }
            }
        }
        FilterResults results = new FilterResults();
        results.values = filteredList;
        return results;
    }

    @Override
    protected void publishResults(CharSequence constraint, FilterResults results) {
        data1.clear();
        data1.addAll( (List) results.values);
        notifyDataSetChanged();
    }
};

;

public class MyViewHolder extends RecyclerView.ViewHolder{

    TextView mytext1;
    ConstraintLayout mainLayout;

    public MyViewHolder(@NonNull View itemView) {
        super(itemView);
        mytext1 = itemView.findViewById(R.id.title);
        mainLayout = itemView.findViewById(R.id.mainLayout);
    }
}
public class PasswortFragment extends Fragment {

public PasswortFragment() {
    // Required empty public constructor
}
RecyclerView recyclerView;
String tabelle = "Passwort";
List<String> titel;
DatabaseHelper myDB;
Adapter adapter;


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View view = inflater.inflate(R.layout.fragment_passwort, container, false);
    myDB = new DatabaseHelper(getActivity());

    recyclerView = (RecyclerView) view.findViewById(R.id.recyclerViewPasswoerter);
    titel = Arrays.asList(myDB.getItems(tabelle));


    final LinearLayoutManager layoutManager = new LinearLayoutManager((getActivity()));
    layoutManager.setOrientation((LinearLayoutManager.VERTICAL));
    recyclerView.setLayoutManager(layoutManager);

    adapter = new Adapter(getActivity(), titel, "Passwoerter");
    recyclerView.setAdapter(adapter);


    setHasOptionsMenu(true);

    return view;
}