gpt4 book ai didi

android - recyclerview header,从Activity/Fragment中的header访问对象

转载 作者:行者123 更新时间:2023-11-29 00:07:25 26 4
gpt4 key购买 nike

所以我关注了this awesome answer在我的 recyclerview 中获取标题 View 。到目前为止效果很好。现在是实现的时候了,但问题来了:如何从我的 Fragment 访问标签或图像到我的回收器 View 标题?

我知道反过来,在单击按钮时,在从任何回收器 View 持有者到我的 fragment 的任何事件处理程序上,但我不知道如何以这种方式做到这一点。

为什么?

在我的页眉 View 中有一个 EditText、Button 和标签。当用户按下按钮时,它会从 EditText 中获取文本,并通过某些接口(interface)将其发送到我的 Fragment。经过一些代码处理后,这将给出一个结果,例如,至少需要 3 个字符,或者在调用 API 后,它将给出一条消息,如:“还没有关于此的帖子。”

我认为在 recyclerViewHolder 中进行所有 API 处理和思考是不好的做法。我更喜欢在我的 fragment 中执行此操作,稍后我必须从一个 fragment 切换到另一个 fragment (标签栏),然后自动填充 EditText 并开始搜索帖子。

一些代码,我的 fragment :

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_find, container, false);
List<Post> emptyPosts = new ArrayList<>();

adapter = new FindAdapter(emptyPosts);
adapter.setClickListener(this);
recyclerView = (RecyclerView) view.findViewById(R.id.rvFindList);
LinearLayoutManager layoutManager = new LinearLayoutManager(getActivity().getBaseContext());
recyclerView.setLayoutManager(layoutManager);
recyclerView.setItemAnimator(new DefaultItemAnimator());
recyclerView.setAdapter(adapter);
return view;
}

在一些 api 调用之后:

   adapter.setNewData(posts);
adapter.notifyDataSetChanged();

适配器,非常基本的实现,通过一些调整以获得标题 View :

public class FindAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {

private static final int TYPE_HEADER = 0;
private static final int TYPE_ITEM = 1;
List<Post> posts = Collections.emptyList();
private ClickListenerFindList listener;

public interface ClickListenerFindList{
void FindClicked(View view, int position);
}


public FindAdapter(List<Post> posts) {
this.posts = posts;

}

public void setNewData(List<Post> posts)
{
this.posts = posts;
}

@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
if (viewType == TYPE_ITEM) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.responses_row, parent, false);
return new MyViewHolder(view);
} else if (viewType == TYPE_HEADER) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.find_header, parent, false);
return new HeaderViewHolder(view);
}
throw new RuntimeException("there is no type that matches the type " + viewType + " + make sure your using types correctly");
}

@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
if (holder instanceof MyViewHolder) {
MyViewHolder viewHolder = (MyViewHolder)holder;
Post post = getItem(position);
//...set contents for post
} else if (holder instanceof HeaderViewHolder) {
HeaderViewHolder headerView = (HeaderViewHolder) holder;
//...set some extra values if needed

}
}

//extra methods like getItemCounts, getItemViewType, isPositionHeader, getItem

public void setClickListener(ClickListenerFindList listener)
{
this.listener = listener;
}


class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{

//...fields, buttons, etc.

public MyViewHolder(View itemView) {
super(itemView);
//...initiating fields, set one click listener to get back to fragment
}

@Override
public void onClick(View v) {
if(listener != null)
{
listener.FindClicked(v, getAdapterPosition());
}
}
}

class HeaderViewHolder extends RecyclerView.ViewHolder
{
//...fields, buttons, etc.
//how do I access them from fragment?

public HeaderViewHolder(View itemView) {
super(itemView);
//..initiate fields, buttons, etc.
}

}
}

问题如何将数据从我的 Fragment 发送到 HeaderViewHolder

最佳答案

您可以向您的适配器添加一个方法来接收您想要在 header 中更新的数据。在该方法中,调用 this.notifydataSetChanged()。然后,当显示/重新显示标题时,适配器将为您的标题调用 onBindViewHolder()

关于android - recyclerview header,从Activity/Fragment中的header访问对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32849380/

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