Android中createChooser调用后不显示指定标题问题求助
解决ListView条目点击分享时
createChooser标题不显示的问题 我来帮你搞定这个分享选择器标题不显示的问题!结合你给出的代码,我整理了几个可能的原因和对应的解决方案:
可能的原因
- Context类型不对:如果你的Adapter里用的是Application Context(比如
getApplicationContext()),而不是当前Activity的Context,部分Android系统会忽略createChooser里的标题参数——因为Application Context没有绑定Activity栈,启动方式受限。 - 系统/OEM定制限制:有些国产ROM或者高版本Android系统会默认替换或隐藏
createChooser的自定义标题,改用系统自带的文案。
解决方案
方案一:改用Activity Context(最推荐)
这是最直接有效的方法,在创建CustomAdapter的时候,传入当前Activity的实例作为context,而不是Application Context。比如在你的Activity里初始化Adapter时:
CustomAdapter adapter = new CustomAdapter(this, yourArrayList);
这样在Adapter的点击事件里,用这个Activity Context启动分享选择器,标题就能正常显示了,不需要修改其他代码。
方案二:给选择器Intent添加启动Flag(适配必须用Application Context的场景)
如果因为某些限制必须使用Application Context,你可以给createChooser返回的Intent添加必要的启动Flag,强制系统显示标题:
v.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent (); intent.setAction(Intent.ACTION_SEND); intent.putExtra(Intent.EXTRA_TEXT, tv2.getText().toString()); intent.setType("text/plain"); // 创建选择器Intent并添加Flag Intent chooserIntent = Intent.createChooser(intent, "Share using"); chooserIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS); context.startActivity(chooserIntent); } });
不过这种方法在部分定制ROM上可能依然不生效,优先推荐方案一。
方案三:自定义分享选择器(彻底摆脱系统限制)
如果上面两种方法都不行,你可以自己实现一个自定义的分享选择器对话框,完全控制标题和选项展示:
v.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent (); intent.setAction(Intent.ACTION_SEND); intent.putExtra(Intent.EXTRA_TEXT, tv2.getText().toString()); intent.setType("text/plain"); PackageManager pm = context.getPackageManager(); List<ResolveInfo> resolveInfos = pm.queryIntentActivities(intent, 0); // 准备分享应用的名称、图标和对应Intent List<CharSequence> appNames = new ArrayList<>(); List<Intent> shareIntents = new ArrayList<>(); for (ResolveInfo info : resolveInfos) { Intent shareIntent = new Intent(intent); shareIntent.setComponent(new ComponentName(info.activityInfo.packageName, info.activityInfo.name)); shareIntents.add(shareIntent); appNames.add(info.loadLabel(pm)); } // 弹出自定义对话框 new AlertDialog.Builder(context) .setTitle("Share using") // 这里的标题完全由你控制 .setAdapter(new ArrayAdapter<>(context, android.R.layout.select_dialog_item, appNames), new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { context.startActivity(shareIntents.get(which)); } }) .show(); } });
这种方式完全不受系统限制,标题肯定能正常显示,还能自定义样式。
内容的提问来源于stack exchange,提问作者rahul
相关产品推荐
相关产品推荐

