У меня есть функция AllInstalledApp, чтобы получить все установленное приложение, и внутри него я установил обратный вызов для проверки обновленного приложения, выполнение которого занимает 1-2 секунды. И обратный вызов имеет функцию «For», поэтому функция «For» уже завершена, и обратный вызов все еще продолжается, чтобы получить данные, когда я устанавливаю RecyclerView ниже функции AllInstalledApp, он пуст, потому что представление рециркулятора уже создано, и Модель все еще продолжает добавление обновленного приложения
#
В заключение, CallbackStill работает для добавления модели, но RecyclerView уже создан, и он становится пустым
// OnCreate
MyAppsInstalledApps(false);
RecyclerViewSet();
// MyAppInstalledApps function
private void MyAppsInstalledApps(boolean getSysPackages) {
List<PackageInfo> packs = getActivity().getPackageManager().getInstalledPackages(0);
for(int i=0;i<packs.size();i++) {
final PackageInfo p = packs.get(i);
if ((!getSysPackages) && (p.versionName == null)) {
continue ;
}
if(!p.packageName.contains("com.samsung") && !p.packageName.contains("com.android") && !p.packageName.contains("com.sec") && !p.packageName.contains("com.google")) {
//Game
if(packageIsGame(getActivity(), p.packageName) == true){
PackageManager getPackageManager = getActivity().getPackageManager();
Resources res = null;
try {
res = getPackageManager.getResourcesForApplication(p.applicationInfo);
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
final Drawable drawable = res.getDrawable(p.applicationInfo.icon);
CheckAppUpdateCall(new OnTestingCBListener() {
@Override
public void onSuccessCB(String ResultValue) {
//THIS
int UpdateAvailable = Integer.parseInt(ResultValue);
ModelGameAppAdding(p.applicationInfo.loadLabel(getActivity().getPackageManager()).toString(), p.packageName, p.versionName, p.versionCode, drawable, UpdateAvailable);
}
}, p.packageName, p.versionName);
}
}
}
// CheckAppUpdateFunction
OnTestingCBListener onTestingCBListener;
public void CheckAppUpdateCall(final OnTestingCBListener onSelectListener, final String xpackagename, String yversionname){
final String apppackagenamex = xpackagename;
final String appversionnamex = yversionname;
new GooglePlayAppVersion(apppackagenamex, new GooglePlayAppVersion.Listener() {
@Override
public void result(String version) {
Toast.makeText(getActivity(), "Latest Version:" + version, Toast.LENGTH_SHORT).show();
if(version != null && !version.isEmpty() && !version.equals("null")){
if(!version.equals("Varies with device")) {
onTestingCBListener = onSelectListener;
if (compareVersion(appversionnamex, version) == true) {
onTestingCBListener.onSuccessCB("0");
Toast.makeText(getActivity(), "This is the latest version!", Toast.LENGTH_SHORT).show();
} else if (compareVersion(appversionnamex, version) == false) {
//THIRD
onTestingCBListener.onSuccessCB("1");
Toast.makeText(getActivity(), "There has an update for this app!", Toast.LENGTH_SHORT).show();
}
}
}
}
}).execute();
}
// ModelGameAppAdding
private void ModelGameAppAdding(String appName, String packageName, String versionName, int versionCode, Drawable drawable, int UpdateAvailable){
modelMyAppsInstalledApps.add(new ModelMyAppsInstalledApps(appName, packageName, versionName, versionCode, drawable, UpdateAvailable));
}