【Android 插件化】VirtualApp 源码分析 ( 添加应用源码分析 | LaunchpadAdapter 适配器 | 适配器添加元素 | PackageAppData 元素 )
文章目錄
- 一、添加應用源碼分析
- 1、LaunchpadAdapter 適配器
- 2、適配器添加元素
- 3、PackageAppData 元素
一、添加應用源碼分析
1、LaunchpadAdapter 適配器
在 io.virtualapp.home.HomeActivity 中 , 點擊已安裝應用列表中的元素 , 啟動安裝的 APK 應用 ;
下圖顯示的 RecyclerView 列表如下 :
<android.support.v7.widget.RecyclerViewandroid:id="@+id/home_launcher"android:layout_width="match_parent"android:layout_height="match_parent"android:clipToPadding="false"android:scrollbars="vertical"tools:listitem="@layout/item_launcher_app" />在 HomeActivity 中定義的 RecyclerView 如下 :
private RecyclerView mLauncherView;mLauncherView = (RecyclerView) findViewById(R.id.home_launcher);設置的適配器如下 :
private LaunchpadAdapter mLaunchpadAdapter;2、適配器添加元素
在 io.virtualapp.home.adapters.LaunchpadAdapter 中 , 列表數據源是 List<AppData> mList , 調用 public void add(AppData model) 添加元素 ;
public class LaunchpadAdapter extends RecyclerView.Adapter<LaunchpadAdapter.ViewHolder> {private List<AppData> mList;// 添加元素public void add(AppData model) {int insertPos = mList.size() - 1;mList.add(insertPos, model);notifyItemInserted(insertPos);} }在 HomeActivity 的 public void addAppToLauncher(AppData model) 方法中 , 添加已安裝的應用信息 ,
public class HomeActivity extends VActivity implements HomeContract.HomeView {@Overridepublic void addAppToLauncher(AppData model) {List<AppData> dataList = mLaunchpadAdapter.getList();boolean replaced = false;for (int i = 0; i < dataList.size(); i++) {AppData data = dataList.get(i);if (data instanceof EmptyAppData) {mLaunchpadAdapter.replace(i, model);replaced = true;break;}}if (!replaced) {mLaunchpadAdapter.add(model);mLauncherView.smoothScrollToPosition(mLaunchpadAdapter.getItemCount() - 1);}} }在 HomeActivity 中聲明的 public void addAppToLauncher(AppData model) 方法 , 是在 public void addApp(AppInfoLite info) 方法中調用的 , 應用安裝完畢后 , 會調用添加應用到列表中的方法 ;
class HomePresenterImpl implements HomeContract.HomePresenter {@Overridepublic void addApp(AppInfoLite info) {class AddResult {private PackageAppData appData;private int userId;private boolean justEnableHidden;}AddResult addResult = new AddResult();VUiKit.defer().when(() -> {// 獲取安裝的應用信息 , 該應用之前是否安裝過// 這里應該是判斷 克隆應用 / SD 卡 APK 文件}).then((res) -> {addResult.appData = PackageAppDataStorage.get().acquire(info.packageName);}).done(res -> {// 是否有多個版本 boolean multipleVersion = addResult.justEnableHidden && addResult.userId != 0;if (!multipleVersion) {PackageAppData data = addResult.appData;data.isLoading = true;// 添加應用mView.addAppToLauncher(data);handleOptApp(data, info.packageName, true);} else {MultiplePackageAppData data = new MultiplePackageAppData(addResult.appData, addResult.userId);data.isLoading = true;// 添加應用mView.addAppToLauncher(data);handleOptApp(data, info.packageName, false);}});} }3、PackageAppData 元素
上述 LaunchpadAdapter 列表適配器的數據源 List<AppData> dataList , 中的元素類型是 io.virtualapp.home.modelsPackageAppData ;
public class PackageAppData implements AppData {public String packageName;public String name;public Drawable icon;public boolean fastOpen;public boolean isFirstOpen;public boolean isLoading; }總結
以上是生活随笔為你收集整理的【Android 插件化】VirtualApp 源码分析 ( 添加应用源码分析 | LaunchpadAdapter 适配器 | 适配器添加元素 | PackageAppData 元素 )的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Android 插件化】Virtual
- 下一篇: 【Android 插件化】Virtual