Android fragments 搜索包含Recyclerview的片段
我有3个碎片,他们都拿着一个回收视图。但是我不知道应该如何调用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
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;
}