问题描述
我要搜索片段一中的项目,即包含应用程序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) {
}
}
<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 (将#修改为@)