gpt4 book ai didi

android - 如何从 GridView 中的图标启动应用程序?

转载 作者:太空狗 更新时间:2023-10-29 13:19:47 26 4
gpt4 key购买 nike

我正在尝试创建一个启动器,我在其中添加了一个 GridView。这会获取所有已安装的应用程序并将它们排列在网格中。

问题是当我点击那些网格项目时没有任何反应,我想让它打开应用程序。

这可能吗?这是我的代码:

Apps.java:

public class Apps extends Activity {

SharedPreferences colors_app;
GridView mGrid;

@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);

loadApps();

setContentView(R.layout.apps);

mGrid = (GridView) findViewById(R.id.app_grid);
mGrid.setAdapter(new AppsAdapter());

colors_app = getSharedPreferences("MyColor", 1);

int colorcode2 = colors_app.getInt("color_code", 0);
if (colorcode2 != 0) {

Apps.this.findViewById(R.id.apps_back).setBackgroundColor(
colorcode2);

}
}

private List<ResolveInfo> mApps;

private void loadApps() {
Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);
mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);

mApps = getPackageManager().queryIntentActivities(mainIntent, 0);
}

public class AppsAdapter extends BaseAdapter {
public AppsAdapter() {
}

public View getView(int position, View convertView, ViewGroup parent) {
ImageView i;

if (convertView == null) {
i = new ImageView(Apps.this);
i.setScaleType(ImageView.ScaleType.FIT_CENTER);
i.setLayoutParams(new GridView.LayoutParams(90, 90));
i.setPadding(10, 10, 10, 10);
} else {
i = (ImageView) convertView;
}

ResolveInfo info = mApps.get(position);
i.setImageDrawable(info.activityInfo.loadIcon(getPackageManager()));

return i;
}

public final int getCount() {
return mApps.size();
}

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

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

最佳答案

您的代码没有任何应该启动另一个应用程序的内容。您需要添加一些代码来运行您在网格中显示的应用程序。您可以为您的 mGrid 实现一个 OnItemClickListener,或者为适配器内的每个 ImageView 添加一个 OnClickListener

查看来自 "The Big Nerd Ranch Guide" 的示例:

@Override
public void onListItemClick(ListView l, View v, int position, long id) {
ResolveInfo resolveInfo = (ResolveInfo)l.getAdapter().getItem(position);
ActivityInfo activityInfo = resolveInfo.activityInfo;
if (activityInfo == null) return;
Intent i = new Intent(Intent.ACTION_MAIN);
i.setClassName(activityInfo.applicationInfo.packageName, activityInfo.name);
startActivity(i);
}

请记住,此代码应该与 ListView 一起使用,而不是与 GridView 一起使用,因此请确保针对您的情况实现类似的内容。您已经有了 ResolveInfo 对象的列表,因此您可以使用它通过每个项目的位置访问每个应用程序的 ActivityInfo

关于android - 如何从 GridView 中的图标启动应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30411175/

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