Я делаю приложение для удаления приложений (система / пользователь). Я успешно реализовал все, что работает в представлении Recycler. Если я выбираю приложение из представления переработчика, его имя пакета копируется в массив (если его еще нет). Если он уже присутствует, он удаляется из массива.
Проблема, с которой я сталкиваюсь, заключается в странной проблеме , когда я прокручиваю свое представление рециркулятора даже до следующего элемента, массив удаляется и начинает добавлять имена пакетов из первого индекса.
public class AppsAdapter extends RecyclerView.Adapter<AppsAdapter.ViewHolder> {
Context context1;
List<String> stringList;
String selectedApps[];
private int k;
public AppsAdapter(Context context, List<String> list) {
context1 = context;
stringList = list;
}
public static class ViewHolder extends RecyclerView.ViewHolder {
public CardView cardView;
public ImageView imageView;
public TextView textView_App_Name;
public TextView textView_App_Package_Name;
public CheckBox isAppSelected;
public ViewHolder(View view) {
super(view);
cardView = view.findViewById(R.id.card_view);
imageView = view.findViewById(R.id.imageview);
textView_App_Name = view.findViewById(R.id.Apk_Name);
textView_App_Package_Name = view.findViewById(R.id.Apk_Package_Name);
isAppSelected = view.findViewById(R.id.isSelected);
}
}
@Override
public AppsAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view2 = LayoutInflater.from(context1).inflate(R.layout.cardview_layout, parent, false);
ViewHolder viewHolder = new ViewHolder(view2);
return viewHolder;
}
@Override
public void onBindViewHolder(final ViewHolder viewHolder, int position) {
ApkInfoExtractor apkInfoExtractor = new ApkInfoExtractor(context1);
selectedApps = new String[getNumberofApps()];
final String ApplicationPackageName = stringList.get(position);
final String ApplicationLabelName = apkInfoExtractor.GetAppName(ApplicationPackageName);
Drawable drawable = apkInfoExtractor.getAppIconByPackageName(ApplicationPackageName);
viewHolder.textView_App_Name.setText(ApplicationLabelName);
viewHolder.textView_App_Package_Name.setText(ApplicationPackageName);
viewHolder.imageView.setImageDrawable(drawable);
//Adding click listener on CardView to open clicked application directly from here .
viewHolder.cardView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//Toast.makeText(context1, ApplicationPackageName, Toast.LENGTH_SHORT).show();
if (!isPresentApp(ApplicationPackageName)) {
//viewHolder.isAppSelected.setSelected(true);
selectedApps[k] = ApplicationPackageName;
++k;
Log.d("App: ", ApplicationLabelName);
Log.d("Number of apps ", Integer.toString(getActuallNumberOfApps()));
printArray();
} else {
// (isPresentApp(ApplicationPackageName)
//viewHolder.isAppSelected.setSelected(false);
removeAppfromList(ApplicationPackageName);
Toast.makeText(context1, "Already present", Toast.LENGTH_SHORT).show();
Log.d("App removed: ", ApplicationLabelName);
Log.d("Number of apps ", Integer.toString(getActuallNumberOfApps()));
printArray();
}
}
});
}
public void removeAppfromList(String applicationPackageName) {
for (int y = 0; y < selectedApps.length; ++y) {
if (selectedApps[y] == (applicationPackageName)) {
for (int z = y; z < selectedApps.length - 1; ++z) {
selectedApps[z] = selectedApps[z + 1];
}
--k;
}
}
}
@Override
public int getItemCount() {
return stringList.size();
}
public int getNumberofApps() {
Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);
mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);
List<ResolveInfo> pkgAppsList = context1.getPackageManager().queryIntentActivities(mainIntent, 0);
int size = pkgAppsList.size();
return size;
}
public int getActuallNumberOfApps() {
int y = 0;
for (int p = 0; p < selectedApps.length; ++p) {
if (selectedApps[p] != null)
y++;
}
return y;
}
void printArray() {
for (int u = 0; u < selectedApps.length; ++u) {
if (selectedApps[u] != null)
System.out.println(selectedApps[u]);
}
}
public boolean isPresentApp(String name) {
int p = 0;
for (int a = 0; a < selectedApps.length; ++a) {
if (selectedApps[a] == (name))
p = 1;
}
return p == 1;
}
}
Вот несколько журналов
D / App :: Brave D / Количество приложений: 1 I / System.out: com.brave.browser
D / App :: Camera D / Количество приложений: 2 I / System.out: com.brave.browser I / System.out: com.google.android.GoogleCamera
D / App :: Диск D / Количество приложений: 3 I / System.out: com.brave.browser I / System.out: com.google.android.GoogleCamera I / System.out: com.google. android.apps.docs
Отсюда я начал прокручивать, и он удалил массив.
D / App :: Hangouts D / Количество приложений: 1 I / System.out: com.google.android.talk