从Fragment中的Recyclerview访问一个按钮

时间:2017-08-19 19:34:23

标签: android android-fragments android-recyclerview

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

Recyclerview

    @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

if (response.getResponseInfo().getStatus() != 0) {
            Log.d(TAG, "Profile problem: " + response.getResponseInfo().getMessage());
        } else {
    //How to do some sort of callback here?
        }

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

您应该使用interface,然后将您的片段implement放入其中。我在我的适配器中使用了以下内容

<强> adapter.java

public interface OnClickRecyclerChild {
    void myCallback(String s);
}

当我调用构造函数

时,我附加了我的OnClickRecyclerChild

<强> adapter.java

public adapter(List<bindableAssignment> dataBaseItemList, OnClickRecyclerChild mCallback) {
    this.mCallback = mCallback;
    this.dataBaseItemList = dataBaseItemList;
}

因此,当您调用创建适配器时,可以为其提供类似的接口

mAdapter = new adapter(new ArrayList<bindableAssignment>(), new adapter.OnClickRecyclerChild() {
        @Override
        public void myCallback(String s) {
            Log.d(TAG,s);
        }
    });

当你在适配器的任何地方调用mCallback.myCallback(String)时,myCallback(String s)内的代码将会运行。