Android 从自定义列表启动活动
我在一个活动中安装了应用程序,我在另一个活动中仅列出在第一个活动中检查的应用程序。有三个问题: 第一,它在第二个活动中显示了类似的内容 它显示这样的应用程序,而不是它们的名称和图标。我能为此做些什么 第二,正如您所看到的,它显示了重复项。我没有任何复选框,因此如果在第一个活动中选择了两次应用程序,我不知道如何删除该应用程序 第三,我用它来启动上图中选择的活动Android 从自定义列表启动活动,android,Android,我在一个活动中安装了应用程序,我在另一个活动中仅列出在第一个活动中检查的应用程序。有三个问题: 第一,它在第二个活动中显示了类似的内容 它显示这样的应用程序,而不是它们的名称和图标。我能为此做些什么 第二,正如您所看到的,它显示了重复项。我没有任何复选框,因此如果在第一个活动中选择了两次应用程序,我不知道如何删除该应用程序 第三,我用它来启动上图中选择的活动 Intent newIntent = getPackageManager().getLaunchIntentForPackage
Intent newIntent = getPackageManager().getLaunchIntentForPackage(getPackageName());
startActivity(newIntent);
这是我的第一个活动。我需要在getPackageName()的空格中写什么
如果需要,我将发布第一个和第二个活动的代码。
谢谢
这是我的AppInfoAdapter
public class AppInfoAdapter extends BaseAdapter {
private Context mContext;
private List<?> mListAppInfo;
private PackageManager mPackManager;
public AppInfoAdapter(Context c, List<?> list, PackageManager pm) {
mContext = c;
mListAppInfo = list;
mPackManager = pm;
}
@Override
public int getCount() {
return mListAppInfo.size();
}
@Override
public Object getItem(int position) {
return mListAppInfo.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// get the selected entry
ApplicationInfo entry = (ApplicationInfo) mListAppInfo.get(position);
// reference to convertView
View v = convertView;
// inflate new layout if null
if(v == null) {
LayoutInflater inflater = LayoutInflater.from(mContext);
v = inflater.inflate(R.layout.lvrowlayout, null);
}
// load controls from layout resources
ImageView ivAppIcon = (ImageView)v.findViewById(R.id.ivIcon);
TextView tvAppName = (TextView)v.findViewById(R.id.tvName);
TextView tvPkgName = (TextView)v.findViewById(R.id.tvPack);
// set data to display
ivAppIcon.setImageDrawable(entry.loadIcon(mPackManager));
tvAppName.setText(entry.loadLabel(mPackManager));
tvPkgName.setText(entry.packageName);
// return view
return v;
}
公共类AppInfoAdapter扩展了BaseAdapter{
私有上下文;
私人名单;
专用软件包管理器mPackManager;
公共AppInfoAdapter(上下文c、列表、PackageManager pm){
mContext=c;
mListAppInfo=列表;
mPackManager=pm;
}
@凌驾
public int getCount(){
返回mListAppInfo.size();
}
@凌驾
公共对象getItem(int位置){
返回mlistapingfo.get(位置);
}
@凌驾
公共长getItemId(int位置){
返回位置;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
//获取所选条目
ApplicationInfo条目=(ApplicationInfo)mListAppInfo.get(位置);
//对convertView的引用
视图v=转换视图;
//如果为空,则为新布局充气
如果(v==null){
LayoutFlater充气机=LayoutFlater.from(mContext);
v=充气机充气(R.layout.lvrowlayout,null);
}
//从布局资源加载控件
ImageView ivAppIcon=(ImageView)v.findViewById(R.id.ivIcon);
TextView-tvAppName=(TextView)v.findviewbyd(R.id.tvName);
TextView-tvPkgName=(TextView)v.findviewbyd(R.id.tvPack);
//设置要显示的数据
setImageDrawable(entry.loadIcon(mPackManager));
tvAppName.setText(entry.loadLabel(mPackManager));
tvPkgName.setText(entry.packageName);
//返回视图
返回v;
}
这是我的地图
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="?android:attr/listPreferredItemHeight"
android:padding="5dip"
>
<ImageView
android:id="@+id/ivIcon"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_marginRight="5dip"
android:scaleType="center"
/>
<LinearLayout
android:orientation="vertical"
android:layout_width="0dip"
android:layout_height="fill_parent"
android:layout_weight="1"
>
<TextView
android:id="@+id/tvName"
android:layout_width="fill_parent"
android:layout_height="0dip"
android:layout_weight="1"
android:gravity="center_vertical"
/>
<TextView
android:id="@+id/tvPack"
android:layout_width="fill_parent"
android:layout_height="0dip"
android:layout_weight="1"
android:singleLine="true"
android:ellipsize="marquee"
/>
</LinearLayout>
</LinearLayout>
您使用的是ListView吗?您可以发布您的适配器吗?您似乎没有覆盖ListView适配器的计数或您可以设置图片的布局等 您可以像这样为行创建布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal" >
<ImageView
.... />
<TextView
.... />
</LinearLayout>
是的,我理解。正如我所说的,这些应用程序存储在一个ArrayList A中,它通过捆绑包传递并在另一个活动中访问。那么我应该设置A.appName=(textview)和A.icon=(ImageView)吗?你能发布lvrowlayout.xml吗?你必须传递应用程序有什么原因吗?如果你只是一个图像和两个字符串,我建议创建一个存储这些内容的对象,然后将其传递到listview。是的,我正在构建一个只显示用户选择的应用程序的应用程序,因此我需要能够传递应用程序并启动它们yout_weight=1在内部线性布局中,并将其宽度设置为与父项匹配。否则它将占据整个屏幕,因为imageview没有权重。对于应用程序名称/标签,您可以尝试查看,但我不完全确定。
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
View v = convertView;
LayoutInflater vi (LayoutInflater)getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = vi.inflate(R.layout.custom_row, null);
//Set image and text view here
}