RecyclerView 長按刪除事件,和單機進入程序事件

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一下就應該能看懂了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章