首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在片段中访问“回收视图”中的按钮

在片段中访问“回收视图”中的按钮
EN

Stack Overflow用户
提问于 2017-08-19 19:34:23
回答 2查看 964关注 0票数 0

我有一个异构的RecyclerView,它有一个header。里面有个按钮。我想要做的是改变按钮的属性(背景,文本)从我的Fragment。基本上,当API调用完成并有响应时,我需要以某种方式通知adapter更改按钮的背景和文本。但是,我似乎不知道如何获得按钮的引用,或者将更改按钮属性的代码放在哪里。

Recyclerview

代码语言:javascript
运行
复制
    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        LayoutInflater inflater = LayoutInflater.from(mContext);

        switch (viewType) {
            case HEADER_TYPE:
                View viewHeader = inflater.inflate(R.layout.item_profile_header, parent, false);
                StaggeredGridLayoutManager.LayoutParams lp1 = (StaggeredGridLayoutManager.LayoutParams) viewHeader.getLayoutParams();
                lp1.setFullSpan(true);
                viewHeader.setLayoutParams(lp1);
                return new ProfileAdapter.HeaderHolder(viewHeader);

@Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
        switch (holder.getItemViewType()) {
            case HEADER_TYPE:
                onBind = true;
                bindHeader((ProfileAdapter.HeaderHolder) holder, mHomeList.get(position));
                onBind = false;
                break;

private void bindHeader(final ProfileAdapter.HeaderHolder holder, Home home) {
        holder.mItemProfileHeaderBinding.setHome(home);
        holder.getItemProfileHeaderBinding().btnFollow.setOnClickListener(v -> {
            if (mListener == null) {
                return;
            }
            mListener.onClickFollow();
        });
    }

Fragment

代码语言:javascript
运行
复制
if (response.getResponseInfo().getStatus() != 0) {
            Log.d(TAG, "Profile problem: " + response.getResponseInfo().getMessage());
        } else {
    //How to do some sort of callback here?
        }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-08-19 20:29:58

当您用数据填充标头时,为背景、大小和其他任何内容添加额外的字段,这些字段将根据情况需要设计标题,然后当您需要更改标题时,只需更改适配器列表并调用消息头上更改的通知项。

票数 1
EN

Stack Overflow用户

发布于 2017-08-20 02:28:52

您应该使用一个interface,然后使用您的片段implement它。我在适配器中使用以下内容

adapter.java

代码语言:javascript
运行
复制
public interface OnClickRecyclerChild {
    void myCallback(String s);
}

我在调用构造函数时附加了我的OnClickRecyclerChild

adapter.java

代码语言:javascript
运行
复制
public adapter(List<bindableAssignment> dataBaseItemList, OnClickRecyclerChild mCallback) {
    this.mCallback = mCallback;
    this.dataBaseItemList = dataBaseItemList;
}

因此,当您调用您的创建适配器时,您可以为它提供如下所示的接口

代码语言:javascript
运行
复制
mAdapter = new adapter(new ArrayList<bindableAssignment>(), new adapter.OnClickRecyclerChild() {
        @Override
        public void myCallback(String s) {
            Log.d(TAG,s);
        }
    });

当您在适配器中的任何地方调用mCallback.myCallback(String)时,mCallback.myCallback中的代码都会运行。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45775623

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档