当前位置: 首页 > 知识库问答 >
问题:

我可以让两个xml布局使用相同的查看器使用Kotlin合成扩展吗?

唐渊
2023-03-14

我有一个具有可展开行的列表视图。当我单击该行时,我会放大一个不同的xml布局,该布局非常相似(item_view(左)和item_view_expand(右)),并且具有几乎所有相同的视图,但是一些子视图以不同的大小显示(例如图像视图被放大),并且在扩展的视图中有一个额外的按钮(保存照片)。

在将该文件转换为kotlin并尝试使用kotlin合成扩展访问视图时,我收到错误重载解析歧义。这是有意义的,因为确实有两个xml文件具有相同的ID,并且都导入到这个文件中。我看到的大多数stackoverflow帖子(比如这篇文章)都是通过删除一条导入语句或更改ID来解决的。但是我希望ID匹配,因为我希望有一个共享的ViewHolder可以绑定这两个不同的视图。毕竟,文本视图和图像都是相同的内容,只是在不同的视觉布局中。

我可以用Butternife在Java中做到这一点,因为我只需将折叠布局(Download)中不存在的按钮注释为nullable,并在绑定中执行一些null检查。我想知道如何让两个xml布局使用相同的绑定,因为几乎所有的东西都是一样的。这可以在kotlin使用合成扩展吗?

下面是我的ViewHolder的java代码

   public static class ItemViewHolder extends RecyclerView.ViewHolder {
    @BindView(R.id.tvName) TextView mNameTextView;
    @BindView(R.id.tvRelationship) TextView mRelationshipTextView;
    @BindView(R.id.tvLifespan) TextView mLifespanTextView;
    @BindView(R.id.topDivider) View mTopDividerView;
    @BindView(R.id.bottomDivider) View mBottomDividerView;
    @BindView(R.id.imageView) ImageView mImageView;
    @Nullable
    @BindView(R.id.savePhoto) TextView mSavePhoto;


    public ItemViewHolder(final View view) {
        super(view);
        ButterKnife.bind(this, view);
    }

    private void bindItem(final int position, final PathPerson pathPerson, final PathDetailAdapter pathDetailAdapter) {
        // item
        mNameTextView.setTag(position);

        PathUtilities.loadRoundedLeftCornersImageForGender(pathPerson, mImageView);
        mNameTextView.setText(pathPerson.getFullName());
        itemView.setOnClickListener(v -> {
            pathPerson.toggleExpanded();
            pathDetailAdapter.notifyItemChanged(position);
        });
        if (mSavePhoto != null) {
            mSavePhoto.setOnClickListener(v -> {
                // TODO: 9/7/17 download original
                Toast.makeText(itemView.getContext(), R.string.downloading, Toast.LENGTH_SHORT).show();
            });
        }

        PathUtilities.setLifespan(pathPerson, mLifespanTextView);
        PathUtilities.setRelationshipTextAndColorForGender(pathPerson, mRelationshipTextView);

        if (position == 1) {
            mTopDividerView.setVisibility(View.VISIBLE);
            mBottomDividerView.setVisibility(View.VISIBLE);
        } else if (position == pathDetailAdapter.mPathList.size() - 1) {
            mTopDividerView.setVisibility(View.GONE);
            mBottomDividerView.setVisibility(View.GONE);
        } else {
            mTopDividerView.setVisibility(View.GONE);
            mBottomDividerView.setVisibility(View.VISIBLE);
        }
    }
}

共有1个答案

糜昌胤
2023-03-14

结果,通过删除一个导入语句,问题得到了解决。在我的例子中,我需要保留一个有额外下载按钮的按钮(这两个按钮的超级集)

 类似资料:
  • 我可以同时使用工具和扩展器吗?因为当我在同一个类上使用实现时,我需要在另一个类上继承一些东西。 怎么会是那样?

  • 我在构建一个XML布局时遇到了一个问题:屏幕的一半是videoView,有两个孩子的可扩展列表,视频框下面有一些textView。文本位于列表下方,因此如果我展开列表,列表将填充半屏幕的其余部分,它应该能够滚动到文本视图。 我的想法是将可扩展列表放在滚动视图中,但我无法扩展列表。 我的布局如下: 线性布局 视频视图 滚动视图 线性布局 可扩展列表视图 文本视图 有没有其他方法来实现我的意图,或者为

  • 问题内容: 如果我有几个具有所需功能的类,但想单独存储以进行组织,我可以扩展一个类以同时拥有这两个类吗? 即 编辑:我知道如何一次扩展一个类,但是我正在寻找一种使用多个基类立即扩展一个类的方法- AFAIK,您不能在PHP中做到这一点,但是应该有一些解决方法,而不必诉诸于, 问题答案: 回答您的编辑: 如果您确实想伪造多重继承,则可以使用魔术函数__call()。 尽管从A类用户的角度来看,这很丑

  • 我需要向3个服务发送消息,并在最后聚合结果 这很容易通过发布订阅频道实现- 当其中一个服务实际上是对其他服务的2次调用时,就会出现问题。现在我想介绍另外的和聚合器。 例如。 因此不会对消息进行分组(逐个发送)。 聚合器1从聚合器2获取结果并发送消息,无需等待service activator组1的消息。 有什么建议吗?

  • 我需要在两个活动中使用相同的ArrayAdapter。在MainActivity中,我只需要显示isConsumido()=true的项,而在另一个活动中,我需要显示所有项。 我的MainActivity适配器: 现在,我使用两个适配器,但是当我在TelaCadastrados的一个适配器项中检查isConsumido()时,MainActivity中的同一项需要变为不可见,而当我删除TelaCa

  • 我想编写一个应用程序来使用netconf配置网元,我正在寻找一个开源的netconf客户端来实现它。 我已经尝试并成功地使用Jnc做到了这一点。问题是jnc不支持netconf 1.1,我正在寻找另一种解决方案。 是否可以通过opendaylight使用相同的功能?在jnc中,我将Yang文件转换为java类,填充它们,然后配置设备。对于相同的功能,我应该在opendaylight中执行哪些步骤?