我正在尝试实现可滚动的按钮列表。
如上面的屏幕截图所示,屏幕上显示3个按钮。我正在尝试创建一个按钮列表,用户可以一次滚动它们3个。
我试过两种方法:
1-查看寻呼机:我为每3个按钮创建了1个片段。
滚动工作完全符合我的要求,但是当我需要添加新按钮时,这是一个真正的开销工作。
2- RecyclerView:哪种方法效果不错,但一次不滚动。
所以我想在屏幕上只显示3个项目。当用户滚动时,它将滚动到接下来的3个项目。
是否可以使用RecyclerView(更容易添加)来执行此操作?
答案 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>