Это код ExpandableRecyclerViewer . Я хочу добавить Search View для фильтрации песен и исполнителей, когда пользователь вводит название песни или певца. Я попытался добавить представление поиска в recyclerview и expandablelistview , но они не сработали. Может кто-нибудь, пожалуйста, дайте мне способ решить мою проблему?
Моя основная деятельность
package com.example.expandableview;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import android.annotation.SuppressLint;
import android.app.SearchManager;
import android.content.Context;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.inputmethod.EditorInfo;
import android.widget.Filter;
import android.widget.Filterable;
import android.widget.SearchView;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
private RecyclerView recyclerView;
private SearchView search;
private SongAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
recyclerView = findViewById(R.id.recyclerview);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
ArrayList<Singer>singers = new ArrayList<>();
ArrayList<Song> shakirasong = new ArrayList<>();
shakirasong.add(new Song("Hips Don't Lie"));
shakirasong.add(new Song("Chantaje"));
shakirasong.add(new Song("Locca"));
shakirasong.add(new Song("Whenever Whenever"));
shakirasong.add(new Song("Me Gusta"));
Singer shakira = new Singer("Shakira", shakirasong);
singers.add(shakira);
ArrayList<Song> westlifesong = new ArrayList<>();
westlifesong.add(new Song("My Love"));
westlifesong.add(new Song("I Wanna Grow Old With You"));
westlifesong.add(new Song("I Lay My Love On You"));
westlifesong.add(new Song("Uptown Girl"));
westlifesong.add(new Song("If I Let You Go"));
Singer westlife = new Singer("Westlife", westlifesong);
singers.add(westlife);
SongAdapter adapter = new SongAdapter(singers);
recyclerView.setAdapter(adapter);
}
}
Мой адаптер
package com.example.expandableview;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Filter;
import android.widget.Filterable;
import android.widget.TextView;
import com.thoughtbot.expandablerecyclerview.ExpandableRecyclerViewAdapter;
import com.thoughtbot.expandablerecyclerview.models.ExpandableGroup;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
public class SongAdapter extends ExpandableRecyclerViewAdapter<SingerViewHolder,SongViewHolder> {
public SongAdapter(List<?extends ExpandableGroup> groups) {
super(groups);
}
@Override
public SingerViewHolder onCreateGroupViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.expandable_recycleview_singer, parent, false);
return new SingerViewHolder(v);
}
@Override
public SongViewHolder onCreateChildViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.expandable_recyclerview_song, parent, false);
return new SongViewHolder(v);
}
@Override
public void onBindChildViewHolder(SongViewHolder holder, int flatPosition, ExpandableGroup group, int childIndex) {
final Song song = (Song) group.getItems().get(childIndex);
holder.bind(song);
}
@Override
public void onBindGroupViewHolder(SingerViewHolder holder, int flatPosition, ExpandableGroup group) {
final Singer singer = (Singer) group;
holder.bind(singer);
}
}
Я также использовал этот код для просмотра в поиске
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater=getMenuInflater();
inflater.inflate(R.menu.example_menu,menu);
MenuItem searchItem=menu.findItem(R.id.action_search);
SearchView searchView=(SearchView) searchItem.getActionView();
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
adapter.getFilter().filter(newText);
return false;
}
});
return true;
}