我正在创建一个名为AlertDialog
的{{1}}自定义类,它将包含一个包含Buttons的ActionDialog
。我有一个自定义类RecyclerView
中填充的按钮列表(目前,我只填充了无用的ActionDialog
来尝试使用它,只是我在另一个类中创建了一个按钮)。>
问题在于,当我创建Button
时,所有按钮都显示为空,但它们没有显示文字/没有单击侦听器(如下图所示)。
(我在另一个类的AlertDialog
中添加了自定义ActionListener
,然后在Button
类中将其作为参数。它将丢失ActionDialog
吗?)
这是结果。
我将在这里留下我的ActionListener
类代码和适配器类。
这是ActionDialog
类:
ActionDialog
这是RecyclerView适配器类:
public class ActionDialog extends AlertDialog{
private RecyclerView mRecyclerView;
private RecyclerView.Adapter mAdapter;
private RecyclerView.LayoutManager mLayoutManager;
private Button actionButtons;
private List<Button> buttons;
private Activity context;
public ActionDialog(@NonNull Activity context, Button actionButtons) {
super(context);
this.context = context;
this.actionButtons = actionButtons;
buttons = new ArrayList<>();
initButton();
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//requestWindowFeature(Window.FEATURE_NO_TITLE);
}
private void initButton(){
initZoneButton();
//TODO init all buttons
Button b1 = new Button(context);
b1.setText("ExampleButton1");
Button b2 = new Button(context);
b2.setText("ExampleButton2");
b1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String a;
}
});
buttons.add(b1);
buttons.add(b2);
}
private void initZoneButton(){
buttons.add(actionButtons); //this button is created in another class and give as parameter in this class
}
public void createDialog(){
Builder mBuilder = new Builder(context);
View view = context.getLayoutInflater().inflate(R.layout.dialog_actionbuttons_layout, null);
mRecyclerView = view.findViewById(R.id.dialog_actionbuttons_rv);
mRecyclerView.setHasFixedSize(true);
mLayoutManager = new LinearLayoutManager(context);
mRecyclerView.setLayoutManager(mLayoutManager);
mAdapter = new ActionButtonsAdapter(buttons);
mRecyclerView.setAdapter(mAdapter);
mBuilder.setView(view);
mBuilder.create().show();
}
}
}
答案 0 :(得分:1)
我认为在onBindViewHolder
方法中,您应该对按钮进行任何操作。
也不需要此处的按钮列表。列出需要保存在Buttons RecyclerView中的数据。
我有一个RecyclerView,它将显示餐厅的流派,例如,我将创建一个字符串列表来保存这些流派的名称(鸡肉,肉类等)。
设置其文字
holder.actionButton.setText(//在这里使用位置);
或单击监听器。
您可以在Google示例中查看recyclerview here
@Override
public void onBindViewHolder(ViewHolder viewHolder, final int position) {
Log.d(TAG, "Element " + position + " set.");
// Get element from your dataset at this position and replace the contents of the view
// with that element
viewHolder.getTextView().setText(mDataSet[position]);
}
其中mDataset是字符串数组。