RecyclerView 长按删除事件,和单机进入程序事件

    技术2025-09-26  76

    package com.example.task16; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.appcompat.app.AlertDialog; import androidx.appcompat.app.AppCompatActivity; import androidx.fragment.app.Fragment; import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.RecyclerView; import android.content.ComponentName; import android.content.DialogInterface; import android.content.Intent; import android.content.pm.ApplicationInfo; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.Toast; import java.util.ArrayList; import java.util.Collections; import java.util.List; public class Task4Activity extends Fragment { RecyclerView recyclerView; List<AppInfo> appInfos; PackageManager pm; @Nullable @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View view = inflater.inflate(R.layout.activity_task4,container,false); return view; } @Override public void onActivityCreated(@Nullable Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); recyclerView =getView().findViewById(R.id.recyclerView4); appInfos = queryFilter(); recyclerView.setLayoutManager(new GridLayoutManager(getActivity(),1)); final GridView4Adapter gridView4Adapter = new GridView4Adapter(getActivity(),appInfos); gridView4Adapter.setOnItemListener(new GridView4Adapter.OnItemClickListener() { public boolean onLongClick(final int position) { AlertDialog.Builder dialogBuidler=new AlertDialog.Builder(getActivity()); dialogBuidler.setMessage("确定删除这条信息么?"); dialogBuidler.setTitle("消息提示"); dialogBuidler.setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); deleteData(position); recyclerView.setAdapter(gridView4Adapter); Toast.makeText(getActivity(), "删除成功", Toast.LENGTH_LONG).show(); } }); dialogBuidler.setNegativeButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }); dialogBuidler.create().show(); return true; } public void onClick(int position) { doStartApplicationWithPackageName(appInfos.get(position).getPkgName()); } }); recyclerView.setAdapter(gridView4Adapter); } private AppInfo getAppInfo(ApplicationInfo app) { AppInfo appInfo =new AppInfo(); appInfo.setAppLabel((String) app.loadLabel(pm)); appInfo.setAppIcon(app.loadIcon(pm)); appInfo.setPkgName(app.packageName); return appInfo; } private List<AppInfo> queryFilter() { pm = getActivity().getPackageManager(); List<ApplicationInfo> list = pm.getInstalledApplications(PackageManager.GET_UNINSTALLED_PACKAGES); Collections.sort(list, new ApplicationInfo.DisplayNameComparator(pm)); List<AppInfo> appInfos = new ArrayList<>(); appInfos.clear(); for (ApplicationInfo app:list){ appInfos.add(getAppInfo(app)); } return appInfos; } private void doStartApplicationWithPackageName(String packageName){ //通过包名获取此App详细信息 PackageInfo packageInfo =null; try { packageInfo =getActivity().getPackageManager().getPackageInfo(packageName,0); } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); } if(packageInfo ==null){ return ; } //创建一个类别为CATRGORY_LAUNCHER的该包名的Intent Intent resolveIntent =new Intent(Intent.ACTION_MAIN,null); resolveIntent.addCategory(Intent.CATEGORY_LAUNCHER); resolveIntent.setPackage(packageInfo.packageName); //通过getPackageManager()的queryIntentActivitires方法去遍历 List<ResolveInfo> resolveInfos =getActivity().getPackageManager().queryIntentActivities(resolveIntent,0); for(ResolveInfo resolveInfo:resolveInfos){ if(resolveInfo!=null){ String pkgName =resolveInfo.activityInfo.name; String className =resolveInfo.activityInfo.name; Intent intent = new Intent(Intent.ACTION_MAIN); intent.addCategory(Intent.CATEGORY_LAUNCHER); //设置CompoentName ComponentName cn =new ComponentName(packageName,className); intent.setComponent(cn); getActivity().startActivity(intent); } } } private void deleteData(int position){ List<AppInfo> newList =new ArrayList<AppInfo>(); appInfos.remove(position); newList.addAll(appInfos); appInfos.clear(); appInfos.addAll(newList); } } package com.example.task16; import android.app.AlertDialog; import android.content.ComponentName; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; import android.widget.Toast; import androidx.annotation.NonNull; import androidx.recyclerview.widget.RecyclerView; import java.util.ArrayList; import java.util.List; public class GridView4Adapter extends RecyclerView.Adapter<MainMenuView4holder> { Context context; List<AppInfo> list; private OnItemClickListener mOnItemClickListener; public GridView4Adapter(Context context, List<AppInfo> list) { this.context = context; this.list = list; } public void setOnItemListener(OnItemClickListener mOnItemClickListener) { this.mOnItemClickListener = mOnItemClickListener; } //定义一个监听接口,里面有两个方法 public interface OnItemClickListener{ void onClick(int position); boolean onLongClick(int position); } @NonNull @Override public MainMenuView4holder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { return new MainMenuView4holder(LayoutInflater.from(context).inflate(R.layout.item4_food,null)); } @Override public void onBindViewHolder(@NonNull MainMenuView4holder holder, final int position) { holder.imageView.setImageDrawable(list.get(position).getAppIcon()); holder.textView.setText(list.get(position).getAppLabel()); if (mOnItemClickListener!=null) { //直接给某个空间添加监听 holder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mOnItemClickListener.onClick(position); } }); //直接给某个空间添加长按监听 holder.itemView.setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(View v) { mOnItemClickListener.onLongClick(position); return true; } }); } } @Override public int getItemCount() { return null!=list?list.size():0; } } class MainMenuView4holder extends RecyclerView.ViewHolder { public ImageView imageView; public TextView textView; public MainMenuView4holder(View itemView) { super(itemView); imageView = itemView.findViewById(R.id.appImage); textView = itemView.findViewById(R.id.appName); } }

    前端页面是

    <?xml version="1.0" encoding="utf-8"?> <RelativeLayout 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=".Task4Activity"> <androidx.recyclerview.widget.RecyclerView android:id="@+id/recyclerView4" android:layout_width="match_parent" android:layout_height="wrap_content"> </androidx.recyclerview.widget.RecyclerView> </RelativeLayout>

     

    <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".Task4Activity"> <LinearLayout android:id="@+id/linearLayout" android:orientation="horizontal" android:layout_width="wrap_content" android:layout_height="wrap_content"> <ImageView android:id="@+id/appImage" android:layout_width="40dp" android:layout_height="40dp" android:src="@mipmap/ic_launcher"/> <TextView android:id="@+id/appName" android:layout_gravity="center" android:layout_marginLeft="10dp" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="计算机"/> </LinearLayout> <View android:layout_marginTop="2dp" android:layout_below="@+id/linearLayout" android:layout_width="match_parent" android:layout_height="1dp" android:background="@color/colorPrimary"/> </RelativeLayout>

     

    没有看明白的可以建个项目把这些复制进去,运行一下bebug一下就应该能看懂了

    Processed: 0.040, SQL: 9