gpt4 book ai didi

java - 如何将 ListView 项添加到整个其他 ListView

转载 作者:行者123 更新时间:2023-12-01 12:41:42 24 4
gpt4 key购买 nike

因此,在我的 Android 应用程序中,我有两个可滚动选项卡,每个选项卡都包含使用 Fragment 的 Listview。一个是应用程序列表,另一个是空白的。我的目标是添加一个加号按钮来代替我的复选框所在的位置,并将该项目复制到另一个空白的 ListView 中。

enter image description here

enter image description here

我对此进行了研究,但我还没有找到任何关于如何实现这一点的成功示例。

Android - Add an item from one ListView to another ListView?

这是我返回应用程序的 fragment

package com.spicycurryman.getdisciplined10.app;

import android.app.ProgressDialog;
import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageItemInfo;
import android.content.pm.PackageManager;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;

import com.ibc.android.demo.appslist.app.ApkAdapter;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;



public class InstalledAppActivity extends Fragment
implements OnItemClickListener {

PackageManager packageManager;
ListView apkList;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {

setHasOptionsMenu(true);
View rootView = inflater.inflate(R.layout.user_installed, container, false);
packageManager = getActivity().getPackageManager();


/*To filter out System apps*/

apkList = (ListView) rootView.findViewById(R.id.applist);

new LoadApplications(getActivity().getApplicationContext()).execute();


return rootView;
}

/**
* Return whether the given PackageInfo represents a system package or not.
* User-installed packages (Market or otherwise) should not be denoted as
* system packages.
*
* @param pkgInfo
* @return boolean
*/
private boolean isSystemPackage(PackageInfo pkgInfo) {
return ((pkgInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0) ? true
: false;
}

private boolean isSystemPackage1(PackageInfo pkgInfo) {
return ((pkgInfo.applicationInfo.flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) != 0) ? false
: true;
}


// Don't need in Fragment
/*@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.block, menu);
// super.onCreateOptionsMenu(menu,inflater);
}*/

@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {

}


private class LoadApplications extends AsyncTask<Void, Void, Void> {

Context mContext;

private ProgressDialog pDialog;
List<PackageInfo> packageList1 = new ArrayList<PackageInfo>();

public LoadApplications(Context context){
Context mContext = context;
}




@Override
protected Void doInBackground(Void... params) {

List<PackageInfo> packageList = packageManager
.getInstalledPackages(PackageManager.GET_PERMISSIONS);


/* List<ApplicationInfo> list = mContext.getPackageManager().getInstalledApplications(PackageManager.GET_UNINSTALLED_PACKAGES);


for(int n = 0;n<list.size();n++){
if ((list.get(n).flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP))
}*/


for(PackageInfo pi : packageList) {
boolean b = isSystemPackage(pi);
boolean c = isSystemPackage1(pi);

if(!b || !c ) {
packageList1.add(pi);
}
}

//sort by application name

final PackageItemInfo.DisplayNameComparator comparator = new PackageItemInfo.DisplayNameComparator(packageManager);

Collections.sort(packageList1, new Comparator<PackageInfo>() {
@Override
public int compare(PackageInfo lhs, PackageInfo rhs) {
return comparator.compare(lhs.applicationInfo, rhs.applicationInfo);
}
});

return null;
}

@Override
protected void onCancelled() {
super.onCancelled();
}

@Override
protected void onPreExecute() {
pDialog = new ProgressDialog(InstalledAppActivity.this.getActivity());
pDialog.setMessage("Loading your apps...");
pDialog.show();

}

@Override
protected void onPostExecute(Void result) {

apkList.setAdapter(new ApkAdapter(getActivity(), packageList1, packageManager));

if (pDialog.isShowing()){
pDialog.dismiss();

}


super.onPostExecute(result);
}


@Override
protected void onProgressUpdate(Void... values) {
super.onProgressUpdate(values);
}
}

}

这是我的适配器类:

package com.ibc.android.demo.appslist.app;

import android.app.Activity;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.graphics.drawable.Drawable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.CheckBox;
import android.widget.TextView;

import com.spicycurryman.getdisciplined10.app.R;

import java.util.List;

public class ApkAdapter extends BaseAdapter {


List<PackageInfo> packageList;
Activity context;
PackageManager packageManager;
boolean[] itemChecked;

public ApkAdapter(Activity context, List<PackageInfo> packageList,
PackageManager packageManager) {
super();
this.context = context;
this.packageList = packageList;
this.packageManager = packageManager;
itemChecked = new boolean[packageList.size()];
}



private class ViewHolder {
TextView apkName;
CheckBox ck1;
}

public int getCount() {
return packageList.size();
}

public Object getItem(int position) {
return packageList.get(position);
}

public long getItemId(int position) {
return 0;
}

@Override
public View getView(final int position, View convertView, ViewGroup parent) {
final ViewHolder holder;

LayoutInflater inflater = context.getLayoutInflater();

if (convertView == null) {
convertView = inflater.inflate(R.layout.installed_apps, null);
holder = new ViewHolder();

holder.apkName = (TextView) convertView
.findViewById(R.id.appname);
holder.ck1 = (CheckBox) convertView
.findViewById(R.id.checkBox1);

convertView.setTag(holder);
//holder.ck1.setTag(packageList.get(position));

} else {

holder = (ViewHolder) convertView.getTag();
}
// ViewHolder holder = (ViewHolder) convertView.getTag();
PackageInfo packageInfo = (PackageInfo) getItem(position);



Drawable appIcon = packageManager
.getApplicationIcon(packageInfo.applicationInfo);




String appName = packageManager.getApplicationLabel(
packageInfo.applicationInfo).toString();
appIcon.setBounds(0, 0, 75, 75);
holder.apkName.setCompoundDrawables(appIcon, null, null, null);
holder.apkName.setCompoundDrawablePadding(15);
holder.apkName.setText(appName);
holder.ck1.setChecked(false);

if (itemChecked[position])
holder.ck1.setChecked(true);
else
holder.ck1.setChecked(false);

holder.ck1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if (holder.ck1.isChecked())
itemChecked[position] = true;
else
itemChecked[position] = false;
}
});

return convertView;

}




}

我将如何实现这一目标?

最佳答案

因此,您正在做的是,使用包管理器填充已安装应用程序的 ListView 。添加一个加号按钮来代替复选框。现在安装与此类似的应用程序 -

    List<PackageInfo> packageList1 = packageManager.getInstalledPackages(0);

final PackageItemInfo.DisplayNameComparator comparator = new PackageItemInfo.DisplayNameComparator(packageManager);

Collections.sort(packageList1, new Comparator<PackageInfo>() {
@Override
public int compare(PackageInfo lhs, PackageInfo rhs) {
return comparator.compare(lhs.applicationInfo, rhs.applicationInfo);
}
});

for (int i = 0; i < packageList1.size(); i++) {

PackageInfo PackInfo = packageList1.get(i);
if (((PackInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0) != true) {

//Add to adapter
}
}
}

现在,在保存选项卡的 Activity 中创建一个公共(public)字符串数组。单击加号按钮时,将包名称添加到数组中。

现在在另一个选项卡上使用相同的适配器,但在将其添加到适配器之前检查是否使用索引在字符串数组中找到它。类似的东西 -

List<PackageInfo> packageList1 = packageManager.getInstalledPackages(0);

final PackageItemInfo.DisplayNameComparator comparator = new PackageItemInfo.DisplayNameComparator(packageManager);

Collections.sort(packageList1, new Comparator<PackageInfo>() {
@Override
public int compare(PackageInfo lhs, PackageInfo rhs) {
return comparator.compare(lhs.applicationInfo, rhs.applicationInfo);
}
});

for (int i = 0; i < packageList1.size(); i++) {

PackageInfo PackInfo = packageList1.get(i);
if (((PackInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0) != true) {
if (Mainactivity.array contains String PackageName= PackInfo.packageName)
{
//Add to adapter
}
}
}
}

要保留选定的应用程序,请将其包名称添加到shared_preferences。

编辑:

在 fragment 的 LoadApplications 类中,您检索已安装应用程序的列表。在第二个 fragment 上使用相同的代码,但只需添加一个条件

    for(PackageInfo pi : packageList) {
boolean b = isSystemPackage(pi);
boolean c = isSystemPackage1(pi);

if(!b || !c ) {

if (array contains packagename){
packageList1.add(pi);
}
}

关于java - 如何将 ListView 项添加到整个其他 ListView ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25042663/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com