【发布时间】:2016-06-07 07:44:11
【问题描述】:
我想在单击适配器类中的列表视图按钮时更新操作栏中的购物车。就像杂货店购物应用一样。
【问题讨论】:
-
你在用什么textview??
-
文本视图和按钮(作为数字选择器)
-
感谢 JonasCz,它解决了我的问题
标签: android listview fragment adapter
我想在单击适配器类中的列表视图按钮时更新操作栏中的购物车。就像杂货店购物应用一样。
【问题讨论】:
标签: android listview fragment adapter
最简单的方法是在您的Activity 上调用invalidateOptionsMenu()。因此,如果您可以从您的 adapter 访问 Activity,只需这样做,一切都会正常工作。
编辑:
如果您无法从adapter 访问Activity,请创建一个。
例如,将 Listener 传递给 adapter 构造函数。
ExampleAdapter(只是必要的部分,可能不需要所有方法,自己做):
public class ExampleAdapter extends RecyclerView.Adapter<ExampleAdapter.ExampleViewHolder> {
private Listener listener;
public ExampleAdapter(Listener listener) {
this.listener = listener;
}
// other needed methods
@Override
public void onBindViewHolder(ExampleAdapter.ExampleViewHolder holder, int position) {
holder.button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (listener != null) {
listener.onOptionsMenuChangeRequested();
}
}
});
//some other stuff
}
public static class ExampleViewHolder extends RecyclerView.ViewHolder {
public Button button;
public ExampleViewHolder(View itemView) {
super(itemView);
// initialize the button
}
}
public interface Listener {
void onOptionsMenuChangeRequested();
}
}
如果您在Fragment 中创建adapter:
ExampleAdapter adapter = new ExampleAdapter(new ExampleAdapter.Listener() {
@Override
public void onOptionsMenuChangeRequested() {
if (getActivity() != null){
getActivity().invalidateOptionsMenu();
}
}
});
或者如果你创建adapter in aActivity`:
ExampleAdapter adapter = new ExampleAdapter(new ExampleAdapter.Listener() {
@Override
public void onOptionsMenuChangeRequested() {
invalidateOptionsMenu();
}
});
【讨论】:
ListView 而不是RecyclerView。无论如何,方法应该完全相同。