gpt4 book ai didi

android - Fragment 中表示列表的按钮功能

转载 作者:行者123 更新时间:2023-11-29 01:13:12 25 4
gpt4 key购买 nike

在我的应用程序中,我有一个代表项目列表的 Fragment

这是使用 RecyclerViewAdapter 完成的。我已经实现了一个 OnListFragmentInteractionListener,因此如果我点击列表中的一个项目,我的应用程序会执行一些操作。

它工作正常。但是,我决定在该项目中也添加一个按钮。因此,如果我单击按钮以外的任何地方,但在该项目的边框内,它会像以前一样继续执行功能,但如果我单击按钮,它会执行其他操作。

我的问题是,我应该在哪里实现这个功能?

表示列表中项目的 XML 文件只是几个 TextView 和一个 FloatingActionButton

我想我必须在我的适配器中实现它,但具体在哪里呢?我的适配器看起来像这样:

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

private final List<Contract> mValues;
private final OnListFragmentInteractionListener mListener;

public ContractRecyclerViewAdapter(List<Contract> items, OnListFragmentInteractionListener listener) {
mValues = items;
mListener = listener;
}

@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.fragment_contract_item, parent, false);
return new ViewHolder(view);
}

@Override
public void onBindViewHolder(final ViewHolder holder, int position) {
holder.mItem = mValues.get(position);
holder.mSell.setText(mValues.get(position).getSell());
if (holder.mDescription != null) {
holder.mDescription.setText(mValues.get(position).getDescription());
}

// TODO: Get the price from parameters?
holder.mPrice.setText(((Double) new Random().nextDouble()).toString());

holder.mView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (null != mListener) {
// Notify the active callbacks interface (the activity, if the
// fragment is attached to one) that an item has been selected.
mListener.onListFragmentInteraction(holder.mItem);
}
}
});

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

}
});
}

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

public void addContract(Contract contract) {
mValues.add(contract);
}

public class ViewHolder extends RecyclerView.ViewHolder {
public final View mView;
public final TextView mSell;
public final TextView mDescription;
public final TextView mPrice;
public final FloatingActionButton mBtn;
public Contract mItem;

public ViewHolder(View view) {
super(view);
mView = view;
mSell = (TextView) view.findViewById(R.id.company_text);
mDescription = (TextView) view.findViewById(R.id.contract_description);
mPrice = (TextView) view.findViewById(R.id.price_text);
mBtn = (FloatingActionButton) view.findViewById(R.id.buy_button_from_list);
}

@Override
public String toString() {
return super.toString() + " '" + mSell.getText() + ", " +
mDescription.getText() + "'";
}
}
}

问题是,无论我在哪里为我的 FloatingActionButton 实现 onClickListener,我都需要访问我的 SharedPreferences,所以我想我必须在Activity 类(或 Fragment 类)。真的吗?如果我这样做,那么我将不得不在内容是这个 View 的 Fragment 中实现它,但是我怎么知道所选项目的位置呢?

谢谢。

最佳答案

您可以在您的接口(interface)中创建另一个方法,

private interface OnListFragmentInteractionListener {

void onListFragmentInteraction(Contract mItem);

void onButtonClicked(Contract mItem); // You may want to edit the arguments of the method

}

在您的 Activity 中实现 onButtonClicked 并在那里执行您的操作。

调用 ButtononClick 中的方法如下,

holder.mBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (null != mListener) {
mListener.onButtonClicked(holder.mItem);
}
}
});

关于android - Fragment 中表示列表的按钮功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41604559/

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