如何解决工具栏上的“搜索”按钮,“片段中的SearchView”不起作用
我要搜索片段一中的项目,即包含应用程序recycleView的AppsFragment。 我是android开发的新手,我做过一些我知道的事情,但是现在我被困在这里,在那里我在工具栏上找到了搜索按钮,它可以正常工作,我的意思是每当我单击它时它就会打开键盘,但是当我输入列表上的东西不会搜索任何东西。 Screenshot
这是我的AppsFragment类
Context context;
private RelativeLayout mRelativeLayout;
Toolbar toolbar;
SearchView searchView ;
private RecyclerView mRecyclerView;
private RecyclerView.LayoutManager mLayoutManager;
private InstalledAppsAdapter mAdapter;
private ArrayList<AppInfo> installedApps;
private AppManager appManager;
public AppsFragment() {
// Required empty public constructor
}
public static AppsFragment newInstance(String param1,String param2) {
AppsFragment fragment = new AppsFragment();
Bundle args = new Bundle();
args.putString(ARG_PARAM1,param1);
args.putString(ARG_PARAM2,param2);
fragment.setArguments(args);
return fragment;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (getArguments() != null) {
mParam1 = getArguments().getString(ARG_PARAM1);
mParam2 = getArguments().getString(ARG_PARAM2);
setHasOptionsMenu(true);//Make sure you have this line of code.
}
}
@Override
public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_tab_one,container,false);
toolbar = view.findViewById(R.id.toolbar);
setHasOptionsMenu(true);
installedApps = new ArrayList<AppInfo>();
mRecyclerView = (RecyclerView) view.findViewById(R.id.recycleView);
LinearLayoutManager layoutManager = new LinearLayoutManager(getContext());
mRecyclerView.setLayoutManager(layoutManager);
appManager = new AppManager(getContext());
installedApps = appManager.getApps();
// Initialize a new adapter for RecyclerView
mAdapter = new InstalledAppsAdapter(getContext(),installedApps);
mRecyclerView.setAdapter(mAdapter);
return view;
}
@Override
public void onCreateOptionsMenu(@NonNull Menu menu,@NonNull MenuInflater inflater) {
inflater.inflate(R.menu.my_search_bar,menu);
MenuItem menuItem = menu.findItem(R.id.search_icon);
SearchView searchView = (SearchView) MenuItemCompat.getActionView(menuItem);
searchView.setOnQueryTextListener((SearchView.OnQueryTextListener) context);
}
@Override
public boolean onQueryTextSubmit(String query) {
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
String userInput = newText.toLowerCase();
List<AppInfo> newList = new ArrayList<>();
for (AppInfo AppSearchList : installedApps) {
if (AppSearchList.toLowerCase().contains(userInput)) {
newList.add(AppSearchList);
}
}
mAdapter.updateList(newList);
return true;
}
public interface OnFragmentInteractionListener {
}
现在这是我的Adapter类,它是 InstalledAppsAdapter.java
private Context mContext;
private ArrayList<AppInfo> mDataSet;
public InstalledAppsAdapter(Context context,ArrayList<AppInfo> list) {
mContext = context;
mDataSet = list;
}
public static class ViewHolder extends RecyclerView.ViewHolder {
public TextView mTextViewLabel;
public TextView mTextViewPackage;
public ImageView mImageViewIcon;
// public CheckBox mAppSelect;
public RelativeLayout mItem;
public ViewHolder(View v) {
super(v);
// Get the widgets reference from custom layout
mTextViewLabel = (TextView) v.findViewById(R.id.Apk_Name);
mTextViewPackage = (TextView) v.findViewById(R.id.Apk_Package_Name);
mImageViewIcon = (ImageView) v.findViewById(R.id.packageImage);
mItem = (RelativeLayout) v.findViewById(R.id.item);
}
}
@Override
public InstalledAppsAdapter.ViewHolder onCreateViewHolder(ViewGroup parent,int viewType) {
View v = LayoutInflater.from(mContext).inflate(R.layout.applayout,parent,false);
ViewHolder vh = new ViewHolder(v);
return vh;
}
@Override
public void onBindViewHolder(ViewHolder holder,final int position) {
// Get the current package name
final String packageName = mDataSet.get(position).getAppPackage();
// Get the current app icon
Drawable icon = mDataSet.get(position).getAppIcon();
// Get the current app label
String label = mDataSet.get(position).getAppName();
// Set the current app label
holder.mTextViewLabel.setText(label);
// Set the current app package name
holder.mTextViewPackage.setText(packageName);
// Set the current app icon
holder.mImageViewIcon.setImageDrawable(icon);
// holder.mAppSelect.setChecked(mDataSet.get(position).isSelected());
holder.mItem.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mDataSet.get(position).setSelected(!mDataSet.get(position).isSelected());
InstalledAppsAdapter.this.notifyDataSetChanged();
}
});
}
@Override
public int getItemCount() {
// Count the installed apps
return mDataSet.size();
}
public void updateList(List<AppInfo> newList){
mDataSet = new ArrayList<>();
mDataSet.addAll(newList);
notifyDataSetChanged(); // for performing the filter operation
}
}
这是我的ViewPager类
public class AfterSendViewPager extends AppCompatActivity implements AppsFragment.OnFragmentInteractionListener,ExplorerFragment.OnFragmentInteractionListener,MusicFragment.OnFragmentInteractionListener,ImageFragment.OnFragmentInteractionListener,VideoFragment.OnFragmentInteractionListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_after_send_view_pager);
TabLayout tabLayout = findViewById(R.id.tablayout);
tabLayout.addTab(tabLayout.newTab().setText("Apps"));
tabLayout.addTab(tabLayout.newTab().setText("Files"));
tabLayout.addTab(tabLayout.newTab().setText("Music"));
tabLayout.addTab(tabLayout.newTab().setText("Photos"));
tabLayout.addTab(tabLayout.newTab().setText("Videos"));
tabLayout.setTabGravity(TabLayout.GRAVITY_FILL); // this will set all tabs in suitable manner
final ViewPager viewPager = findViewById(R.id.viewpager);
final MyPagerAdapter pagerAdapter = new
MyPagerAdapter(getSupportFragmentManager(),tabLayout.getTabCount());
viewPager.setAdapter(pagerAdapter);
viewPager.setOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));
tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
viewPager.setCurrentItem(tab.getPosition());
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
}
});
}
@Override
public void onFragmentInteraction(Uri uri) {
}
}
现在这是我的菜单xml
<menu xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/search_icon"
android:title="Search"
android:icon="@drawable/ic_baseline_search_24"
app:actionViewClass="androidx.appcompat.widget.SearchView"
app:showAsAction="ifRoom|collapseActionView"/>
</menu>
最后这是我的ViewPager类XML
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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=".AfterSendViewPager"
android:orientation="vertical">
<androidx.appcompat.widget.Toolbar
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/toolbar"
android:background="#575555"
android:minHeight="?attr/actionBarSize"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
/>
<com.google.android.material.tabs.TabLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/tablayout"
android:background="#494545"
android:minHeight="?attr/actionBarSize"
android:theme="@style/ShapeAppearance.MaterialComponents.MediumComponent" />
<androidx.viewpager.widget.ViewPager
android:layout_width="match_parent"
android:layout_height="fill_parent"
android:id="@+id/viewpager" />
</LinearLayout>
这就是我所做的所有操作,向我显示“搜索”按钮 但不搜索任何内容
预先感谢
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。