gpt4 book ai didi

android - Chrome 自定义标签。设置多个工具栏项

转载 作者:太空狗 更新时间:2023-10-29 16:32:00 24 4
gpt4 key购买 nike

我正在我们的 Android 应用程序上实现 Chrome 自定义标签页(使用最新版本 23.3.0)。最新版本的 chrome 选项卡允许您使用“builder.addToolbarItem()”方法(根据此 stack overflow answer 的其他可自定义内容)在底部工具栏上添加按钮。现在我在为底部添加操作 Intent 时遇到问题工具栏按钮。我为我添加的每个工具栏项目设置了两个不同的操作 Intent 。但是当打开 chrome 自定义选项卡并单击我添加的任何工具栏项目时,会启动相同的 Intent 。启动的 Intent 始终对应添加到第一个工具栏项的 Intent 集。

这是我在单击回收站 View 的项目时用来构建自定义选项卡的代码。

 protected void openCustomTab(Listing listing, int position) {
CustomTabsIntent.Builder builder = new CustomTabsIntent.Builder();
builder.setToolbarColor(ContextCompat.getColor(this, R.color.primary));
builder.setStartAnimations(this, R.anim.slide_in_right, R.anim.slide_out_left);
builder.setExitAnimations(this, R.anim.slide_in_left, R.anim.slide_out_right);
builder.setCloseButtonIcon(BitmapFactory.decodeResource(getResources(), R.drawable.ic_arrow_back));

addShareAction(listing, builder);
setBottomToolbar(listing, position, builder);
CustomTabActivityHelper.openCustomTab(
this, builder.build(), Uri.parse(listing.getListingURL()));
}

private void setBottomToolbar(Listing listing, int position, CustomTabsIntent.Builder builder) {
builder.setSecondaryToolbarColor(ContextCompat.getColor(this, R.color.color_bottom_toolbar));
addFavoriteButton(listing, position, builder);
addReportButton(position, builder);
}

private void addShareAction(Listing listing, CustomTabsIntent.Builder builder) {
Bitmap iconShare = BitmapFactory.decodeResource(getResources(),
R.drawable.ic_share_custom_tab);
Intent shareIntent = new Intent(Intent.ACTION_SEND);
shareIntent.setType("text/plain");
shareIntent.putExtra(Intent.EXTRA_SUBJECT, getResources().getString(R.string.share_item_message));
shareIntent.putExtra(Intent.EXTRA_TEXT, listing.getShareURL());
PendingIntent pi = PendingIntent.getActivity(this, 0, shareIntent, 0);
builder.setActionButton(iconShare, getString(R.string.share_item_message), pi, true);
}

private void addReportButton(int position, CustomTabsIntent.Builder builder) {
Bitmap reportIcon = BitmapFactory.decodeResource(getResources(),
R.drawable.detail_bottom_hide);
Bundle menuBundle = ActivityOptions.makeCustomAnimation(this, R.anim.slide_in_left,
R.anim.slide_out_right).toBundle();
Intent reportIntent = createDetailActionIntent(position, ViewsConstants.REPORT);
PendingIntent pi = PendingIntent.getActivity(this, ACTION_REPORT, reportIntent, 0, menuBundle);

builder.addToolbarItem(2, reportIcon, getString(R.string.report_listing_dialog_title), pi);
}

private void addFavoriteButton(Listing listing, int position, CustomTabsIntent.Builder builder) {
Bitmap favIcon;
if (listing.getIsFavorite()) {
favIcon = BitmapFactory.decodeResource(getResources(),
R.drawable.detailbottom_fav);
} else {
favIcon = BitmapFactory.decodeResource(getResources(),
R.drawable.detailbottom_nofav);
}
Bundle menuBundle = ActivityOptions.makeCustomAnimation(this, android.R.anim.slide_in_left,
android.R.anim.slide_out_right).toBundle();
Intent favIntent = createDetailActionIntent(position, ViewsConstants.FAVORITE);
PendingIntent pi = PendingIntent.getActivity(this, 0,favIntent, 0, menuBundle);
builder.addToolbarItem(1, favIcon, getString(R.string.add_favorite), pi);
}

private Intent createDetailActionIntent(int position, String action) {
Intent actionIntent = new Intent(getApplicationContext(), ListingActivity.class);
actionIntent.putExtra(ViewsConstants.SEARCH_PARAMETERS, getListingPresenter().getSearchParameters());
actionIntent.putExtra(ViewsConstants.POSITION, position);
actionIntent.putExtra(ViewsConstants.DETAIL_ACTION, action);
return actionIntent;
}

所以在运行这段代码后,会得到一个带有底部工具栏和两个按钮的 chrome 自定义选项卡,收藏夹和报告。单击任何按钮将始终启动最喜欢的操作。我已经确保通过多次调试代码将值正确传递给 Intent 。我不知道我在这里错过了什么。我开始认为这可能是 Chrome 自定义选项卡上的错误,但可能是我遗漏了什么。任何帮助将不胜感激。提前致谢。

已编辑

我已经根据给出的建议编辑了代码库,现在它可以正确地处理每个按钮要执行的操作。比你!但我还有一个问题,关于职位。我正在设置在 intent 上选择的项目的位置,但是当打开 chrome 选项卡,单击任何操作按钮并返回 Activity 时,intent 仅设置了操作但位置丢失了。我不明白为什么?我在上面代码中显示的方法 createDetailActionIntent() 中设置所有 Intent 值。

关于为什么从 chrome 自定义选项卡返回 Activity 并检索 intent extras 时位置丢失的任何想法???

post帮助我解决了我遇到的最后一个问题。

感谢所有为解决这个问题做出贡献的人!

最佳答案

启动相同的 Intent 是因为您创建了两个具有相同 Intent 操作和相同请求代码的 PendingIntent

要解决您的问题,请更改 addFavoriteButtonPendingIntent.getActivity 的请求代码:

private void addFavoriteButton(Listing listing, int position, CustomTabsIntent.Builder builder) {
Bitmap favIcon;
if (listing.getIsFavorite()) {
favIcon = BitmapFactory.decodeResource(getResources(),
R.drawable.detailbottom_fav);
} else {
favIcon = BitmapFactory.decodeResource(getResources(),
R.drawable.detailbottom_nofav);
}
Bundle menuBundle = ActivityOptions.makeCustomAnimation(this, android.R.anim.slide_in_left,
android.R.anim.slide_out_right).toBundle();
Intent favIntent = createDetailActionIntent(position, ViewsConstants.FAVORITE);
PendingIntent pi = PendingIntent.getActivity(this, 1,favIntent, 0, menuBundle);
builder.addToolbarItem(1, favIcon, getString(R.string.add_favorite), pi);
}

如果您想了解更多关于 PendingIntent 的工作原理,您可以阅读此 StackOveflow answer .

关于android - Chrome 自定义标签。设置多个工具栏项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36641866/

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