2

デバイスに現在インストールされているすべてのアプリを表示する、recyclerView のアプリ ドロワーを使用してランチャー アプリケーションを作成しています。ビューでアプリを長押しすると、ユーザーがアプリケーションをアンインストールできるコンテキスト メニューが表示されます。

ただ、どうやってそれを行うのか見当がつきません。このような「このアプリをアンインストールしますか」というダイアログをシステムに表示できるようにしたいのです 。

現在、recyclerview 内のアプリケーションの位置を入力パラメーターとして受け取る空の void メソッドがあります。

関連する recyclerview メソッドは次のとおりです。クラス全体が必要な場合は、編集できます。

public class AppAdapter extends RecyclerView.Adapter<AppAdapter.ViewHolder> {
    public List<AppObject> appsList;

    public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener, View.OnCreateContextMenuListener {
        public TextView appNameTV;
        public ImageView appIconIV;
        public TextView appCategoryTV;
        public LinearLayout appDrawerItemLL;

        //This is the subclass ViewHolder which simply
        //'holds the views' for us to show on each row
        public ViewHolder(View itemView) {
            super(itemView);

            //Finds the views from our row.xml
            appNameTV = (TextView) itemView.findViewById(R.id.applicationNameTextView);
            appIconIV = (ImageView) itemView.findViewById(R.id.applicationIconImageView);
            appCategoryTV = (TextView) itemView.findViewById(R.id.appCategoryTextView);
            appDrawerItemLL = (LinearLayout) itemView.findViewById(R.id.app_drawer_item);

            itemView.setOnClickListener(this);
            itemView.setOnCreateContextMenuListener(this);
        }

        @Override
        public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
            menu.add(this.getAdapterPosition(), 1, 0, "Add to Favourites");
            menu.add(this.getAdapterPosition(), 2, 1, "App info");
            menu.add(this.getAdapterPosition(), 3, 2, "Uninstall app");
        }
    }

    public void uninstallApp(int position) {


        appsList.remove(position); //removes item from listview but it doesn't uninstall it
        notifyDataSetChanged();
    }
}

そして、これが私のアプリ ドロワー クラスのコンテキスト メニュー メソッドです。

    public boolean onContextItemSelected(@NonNull MenuItem item) {

        switch (item.getItemId())
        {
            case 1: // add to favourites in homescreen
                addAppToFavourites();

                return true;

            case 2: // show information about app
                showApplicationInfo();
                return true;

            case 3: // uninstall application
                adapter.uninstallApp(item.getGroupId());
                displayMessage("Uninstalled application");
                return true;

            default:
                displayMessage("You should not be seeing this message");
        }

        return super.onContextItemSelected(item);
    }

ご覧のとおり、コンテキスト メニューは recyclerview アダプター クラスで作成され、次に App Drawer クラスの onContextItemSelected メソッドが、クリックされた各オプションで何が起こるかを選択します。ユーザーが「アプリのアンインストール」をクリックすると、recyclerview アダプター クラスで .uninstallApp メソッドが実行されます。これは、アンインストール機能が行くべき場所です。どうすればそれを実装できますか?

4

1 に答える 1