デバイスに現在インストールされているすべてのアプリを表示する、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 メソッドが実行されます。これは、アンインストール機能が行くべき場所です。どうすればそれを実装できますか?