我有一个RecyclerView
,其自定义Adapter
有一个列表。列表中的每个元素都有一个复选框,可以在我使用的自定义Adapter
处理:
holder.checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
检测何时按下复选框。
问题是我也有一个按钮,但它是从View的类中处理的。在本课程中,我可以参考按钮所在的布局,如下所示:
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
final View buttonInflater = inflater.inflate(R.layout.fragment_button,null);
但在自定义适配器中我不能这样做。我必须这样做:
public MyItemHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_layout, parent, false);
所以有一次我在各自的类中引用了两个布局,我认为我可以引用View类上的按钮,引用它在自定义适配器上的布局。与此类似:
public MyItemHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_layout, parent, false);
View buttonView = LayoutInflater.from(parent.getContext()).inflate(R.layout.fragment_button, parent, false);
但是当我尝试引用该按钮时,它似乎没有被引用。
为什么我要引用自定义适配器视图中的按钮
因为我希望每次选中复选框时,一个单位将被添加到按钮文本中。例如,我第一次选择按钮上列表的复选框时,文本应为1,第二次为2,依此类推。
当我按下复选框时,这是我在自定义适配器上的代码:
int sum = 0;
holder.checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if(buttonView.isChecked()){
sum = sum + 1;
checkBox.setText("" + sum);
}else{
sum = sum - 1;
checkBox.setText("" + sum);
}
}
});
但是这个按钮不写任何东西。
如何在按钮上书写?
提前致谢!
答案 0 :(得分:1)
我想说由于关注点分离,在列表适配器中直接引用按钮是不好的设计。如果你真的想这样做,你就不应该尝试重新充气按钮。你应该做的是在列表适配器上添加属性(或setter),这是对按钮的引用。然后,当您创建列表适配器时,将按钮设置到其上:
final View buttonInflater = inflater.inflate(R.layout.fragment_button,null);
mListAdapter.setButton(buttonInflater);
然后在您的自定义适配器中:
private Button mButton;
public void setButton(Button button) {
mButton = button;
}
然后在您的视图持有者中,您将引用该按钮:
holder.checkBox.setOnCheckedChangeListener(setOnClickListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
mButton.setText(...);
}
});
但是,我强烈建议使用回调模式。也就是说,类似于您实施AdapterView.OnItemClickListener
(https://developer.android.com/reference/android/widget/AdapterView.OnItemClickListener.html)的方式,您可以创建一个自定义界面,如ItemCheckChangedListener
。如果你愿意,它甚至可以匹配CompoundButton.OnCheckedChangeListener
的定义。但基本上只需将您的类(具有按钮和RecyclerView)设置为OnCheckedChangeListener。然后,每当更改复选框状态时,回调您创建的侦听器。然后在那里你可以访问该按钮,这样你就可以更新它的状态了。