如何创建按钮的RecyclerView

时间:2018-07-28 11:47:30

标签: android android-recyclerview android-button

我正在创建一个名为AlertDialog的{​​{1}}自定义类,它将包含一个包含Buttons的ActionDialog。我有一个自定义类RecyclerView中填充的按钮列表(目前,我只填充了无用的ActionDialog来尝试使用它,只是我在另一个类中创建了一个按钮)。

问题在于,当我创建Button时,所有按钮都显示为空,但它们没有显示文字/没有单击侦听器(如下图所示)。 (我在另一个类的AlertDialog中添加了自定义ActionListener,然后在Button类中将其作为参数。它将丢失ActionDialog吗?)

这是结果。

RecyclerView of Button, all empty

我将在这里留下我的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();

}
}

}

1 个答案:

答案 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是字符串数组。