gpt4 book ai didi

android - 如何将数据从回收器适配器发送到 fragment |如何从 recyclerview 适配器调用 fragment 函数

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:12:25 24 4
gpt4 key购买 nike

我在 Fragment 中有代码:

InfoAdapter adapter = new InfoAdapter(getContext(), R.layout.lv_info, infoList );

listingsView = (RecyclerView) rootView.findViewById(R.id.lvInfo);
RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getContext());
listingsView.setLayoutManager(layoutManager);
listingsView.setHasFixedSize(true);
listingsView.setAdapter(adapter);

如何处理对此 fragment 中的项目的点击?例如,使用 ID 项调用函数(位于 fragment 中的函数)(例如 public void onItemClick(int item_id) {})

我的适配器:

public class InfoAdapter extends RecyclerView.Adapter<InfoHolder> {

private final List<Info> infos;
private Context context;
private int itemResource;


public InfoAdapter(Context context, int itemResource, List<Info> infos) {

this.infos = infos;
this.context = context;
this.itemResource = itemResource;
}

@Override
public InfoHolder onCreateViewHolder(ViewGroup parent, int viewType) {

View view = LayoutInflater.from(parent.getContext())
.inflate(this.itemResource, parent, false);
return new InfoHolder(this.context, view);
}

@Override
public void onBindViewHolder(InfoHolder holder, int position) {

Info info = this.infos.get(position);
holder.bindInfo(info);
}

@Override
public int getItemCount() {
return this.infos.size();
}
}

最佳答案

您可以使用界面 来实现您想要的结果。只需在适配器中声明一个接口(interface),其中包含要传递给 fragment 的参数。并在您的 fragment 中初始化接口(interface)并将其传递给适配器的构造函数。

你可以这样做:

在你的 fragment 中

public class MainFragment extends Fragment {

@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);

// Pass your adapter interface in the constructor
InfoAdapter adapter = new InfoAdapter(getContext(), R.layout.lv_info, infoList, adapterInterface );
}

// This is the interface declared inside your adapter.
InfoAdapter.InfoAdapterInterface adapterInterface = new InfoAdapter.InfoAdapterInterface() {
@Override
public void OnItemClicked(int item_id) {
// Do whatever you wants to do with this data that is coming from your adapter
}
};

在你的适配器中

public class InfoAdapter extends RecyclerView.Adapter<InfoHolder> {

private final List<Info> infos;
private Context context;
private int itemResource;

// Interface Object
private InfoAdapterInterface adapterInterface;

public InfoAdapter(Context context, int itemResource, List<Info> infos, InfoAdapterInterface adapterInterface) {

this.infos = infos;
this.context = context;
this.itemResource = itemResource;

// Initialize your interface to send updates to fragment.
this.adapterInterface = adapterInterface;
}

@Override
public InfoHolder onCreateViewHolder(ViewGroup parent, int viewType) {

View view = LayoutInflater.from(parent.getContext())
.inflate(this.itemResource, parent, false);
return new InfoHolder(this.context, view);
}

@Override
public void onBindViewHolder(InfoHolder holder, int position) {

Info info = this.infos.get(position);
holder.bindInfo(info);

// You can pass any data here that is defined in your interface's params
adapterInterface.OnItemClicked(3);
}

@Override
public int getItemCount() {
return this.infos.size();
}

// Your interface to send data to your fragment
public interface InfoAdapterInterface{
void OnItemClicked(int item_id);
}

}

您可以在界面中创建多个方法,并可以轻松地在界面中获取所需的数据。另一个技巧是使用抽象方法

希望对您有所帮助。如果您遇到任何困难,请告诉我:)


编辑以显示如何将接口(interface)从 Adapter 传递到 ViewHolder

在您的适配器类中执行此操作

@Override
public InfoHolder onCreateViewHolder(ViewGroup parent, int viewType) {

View view = LayoutInflater.from(parent.getContext())
.inflate(this.itemResource, parent, false);

// Pass the interface that you've created in the constructor of your viewholder
return new InfoHolder(view, adapterInterface);
}

在您的 ViewHolder 中,您可以获得这样的界面,并在 ViewHolder 中的任何地方使用它:

public class InfoHolder extends RecyclerView.ViewHolder {

public InfoHolder(View itemView, final InfoAdapter.InfoAdapterInterface adapterInterface) {
super(itemView);

itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {

adapterInterface.OnItemClicked(2);

}
});

}

}

这应该可以解决您的接口(interface)问题^_^

关于android - 如何将数据从回收器适配器发送到 fragment |如何从 recyclerview 适配器调用 fragment 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46160295/

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