代码之家  ›  专栏  ›  技术社区  ›  Fyruz

如何创建按钮的RecyclerView

  •  0
  • Fyruz  · 技术社区  · 6 年前

    我正在创建一个 AlertDialog 自定义类,调用 ActionDialog ,它将包含 RecyclerView 包含按钮。我有一个在自定义类中填充的按钮列表 动作对话框 (目前,我只是用无用的 Button 只是尝试使用它,除了我在另一个类中创建的一个)。

    问题是当我创建 对话框 ,所有按钮都显示为空,但没有文本/单击侦听器(如下图所示)。 (我添加了一个自定义 ActionListener 给一个 按钮 在另一个类中,然后将其作为参数 动作对话框 上课。它会失去 监听器 ?)

    这是结果。

    RecyclerView of Button, all empty

    我要离开这里 动作对话框 类代码和适配器类。

    这是 动作对话框 班级:

    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();
    
    }
    }
    

    以下是RecyclerView适配器类:

    public class ActionButtonsAdapter extends RecyclerView.Adapter<ActionButtonsAdapter.ViewHolder>{
    
    private List<Button> dataButtons;
    
    static class ViewHolder extends RecyclerView.ViewHolder {
    
        Button actionButton;
    
    
        ViewHolder(View v) {
            super(v);
    
            actionButton = v.findViewById(R.id.action_button_rv);
    
        }
    
    }
    
    public ActionButtonsAdapter(List<Button> dataButtons){
    
        this.dataButtons = dataButtons;
    
    }
    
    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
    
        holder.actionButton = dataButtons.get(position);
        //i think the problem is here, maybe
    }
    
    @Override
    public ActionButtonsAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType){
    
        View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.recycler_actionbutton_layout, parent, false);
        return new ViewHolder(v);
    
    }
    
    @Override
    public int getItemCount() {
        return dataButtons.size();
    }
    

    }

    1 回复  |  直到 6 年前
        1
  •  2
  •   Xexolas    6 年前

    我想在 onBindViewHolder 方法你应该做任何你想做的事,你的按钮。

    这里也不需要按钮列表。在按钮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是字符串数组。