屏幕上按钮的分页 - Android

时间:2017-07-03 09:44:12

标签: android android-recyclerview android-viewpager recycler-adapter

我正在尝试实现可滚动的按钮列表。

SS

如上面的屏幕截图所示,屏幕上显示3个按钮。我正在尝试创建一个按钮列表,用户可以一次滚动它们3个。

我试过两种方法:

1-查看寻呼机:我为每3个按钮创建了1个片段。

滚动工作完全符合我的要求,但是当我需要添加新按钮时,这是一个真正的开销工作。

2- RecyclerView:哪种方法效果不错,但一次不滚动。

所以我想在屏幕上只显示3个项目。当用户滚动时,它将滚动到接下来的3个项目。

是否可以使用RecyclerView(更容易添加)来执行此操作?

1 个答案:

答案 0 :(得分:1)

一种解决方案可能是使用适配器,每个项目显示3个元素,然后使用PageSnapHelper获取分页效果:

适配器:

  public class ButtonsRecyclerAdapter extends RecyclerView.Adapter<ButtonsRecyclerAdapter.ButtonsViewHolder> {

    private List<Button> mButtons = new ArrayList<>();

    @Override
    public ButtonsViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View layoutView = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item_buttons, null);
        return new ButtonsViewHolder(layoutView);
    }

    @Override
    public void onBindViewHolder(ButtonsViewHolder holder, int position) {
        int startPosition = getItemCount() * position;
        int endPosition = startPosition + 3;

        for (int i = startPosition; i < endPosition || i < mButtons.size(); i++) {
            Button neededButton = holder.getButton(i - position);
            neededButton.setVisibility(View.VISIBLE);
            //Do whant you want to do with it
        }
    }

    @Override
    public int getItemCount() {
        return null != mButtons ? ((int) Math.ceil((double) mButtons.size() / 3)) : 0;
    }

    public class ButtonsViewHolder extends RecyclerView.ViewHolder {

        Button mButtonFirst;
        Button mButtonSecond;
        Button mButtonThird;

        public ButtonsViewHolder(View itemView) {
            super(itemView);
            mButtonFirst = (Button) itemView.findViewById(R.id.button_first);
            mButtonSecond = (Button) itemView.findViewById(R.id.button_second);
            mButtonThird = (Button) itemView.findViewById(R.id.button_third);
        }

        Button getButton(int index) {
            switch (index) {
                case 0:
                    return mButtonFirst;
                case 1:
                    return mButtonSecond;
                case 2:
                    return mButtonThird;
            }
            return null;
        }
    }
}

列表项布局

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="match_parent"
              android:layout_height="match_parent"
              android:gravity="center"
              android:orientation="horizontal">

    <Button
        android:id="@+id/button_first"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:visibility="invisible"/>

    <Button
        android:id="@+id/button_second"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:visibility="invisible"/>

    <Button
        android:id="@+id/button_third"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:visibility="invisible"/>
</LinearLayout>