Итак, это то, что я пытаюсь достичь, - это просмотр ресайклера с сеткой 3x3, и когда элементы превышают 3x3, они попадают в следующий экран/страницу.
Итак, я использовал recyclerview с горизонтальной прокруткой
Это то, что достигнуто до сих пор.
и мой текущий код работает, когда количество элементов равно 7 и выше.
Когда число ниже 7 im сталкивается с проблемами, с которыми мне нужна помощь.
Вводя мои вопросы в качестве вопросов
Вопрос 1:
Почему элементы recyclerview заполняются вертикально?
1 4
2 5
3 6
Я установил свой recyclerview для прокрутки по горизонтали,
new GridLayoutManager(this, span, GridLayoutManager.HORIZONTAL, false);
Вопрос 2:
Когда мой счетчик элементов равен 6, как мне избежать пространства между строками?
Вопрос 3:
Когда мои вещи говорят 4, я хочу показать свои предметы как
1 2 3
4
или
1 3 4
2
в настоящее время он отображается как
Если я устанавливаю интервал в 1, у него есть сетка как
1 2 3 4
заставляет 4 выходить за пределы экрана таким образом
1 2 3 |4
который я хочу избежать.
==============
Используемый код ive
Разметка:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="88dp"
android:layout_height="88dp"
android:gravity="center"
android:layout_margin="10dp"
android:background="@drawable/border"
android:orientation="vertical">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:background="@android:color/darker_gray"
android:orientation="vertical"
android:weightSum="1">
<TextView
android:id="@+id/lblTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:text="TEST"
android:textSize="20sp" />
<TextView
android:id="@+id/lblDesc"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/lblTitle"
android:layout_centerHorizontal="true"
android:text="TEST"
android:textSize="13sp" />
</RelativeLayout>
</LinearLayout>
Adapter:
public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.CustomViewHolder> {
Context ctx;
List<String> listText;
public class CustomViewHolder extends RecyclerView.ViewHolder {
TextView lblText;
public CustomViewHolder(View view) {
super(view);
view.setClickable(true);
lblText = (TextView) view.findViewById(R.id.lblDesc);
}
}
public RecyclerViewAdapter(Context ctx, List<String> listText) {
this.ctx = ctx;
this.listText = listText;
}
@Override
public RecyclerViewAdapter.CustomViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(parent.getContext())
.inflate(R.layout.recycler_child_row, parent, false);
return new CustomViewHolder(itemView);
}
@Override
public void onBindViewHolder(CustomViewHolder holder, int position) {
holder.lblText.setText(listText.get(position));
}
@Override
public int getItemCount() {
return listText.size();
}
}
Деятельность
public class MainActivity extends AppCompatActivity {
private RecyclerView recyclerTest;
private GridLayoutManager gridLayoutRecyclerview;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
recyclerTest = (RecyclerView) findViewById(R.id.recyclerTest);
List<String> items = Arrays.asList("1", "2", "3", "4");
/*List<String> items = Arrays.asList("1", "2", "3", "4", "5");*/
/*List<String> items = Arrays.asList("1", "2", "3", "4", "5", "6", "7");*/
/*List<String> items = Arrays.asList("1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11");*/
/*List<String> items = Arrays.asList("1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13","14");*/
/*List<String> items = Arrays.asList("1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11","12","13","14","15");*/
/*List<String> items = Arrays.asList("1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11","12","13","14","15","16","17");*/
int span = 0;
if (items.size() <= 3) {
span = 1;
} else if (items.size() <= 6) {
span = 2;
} else {
span = 3;
}
gridLayoutRecyclerview = new GridLayoutManager(this, span, GridLayoutManager.HORIZONTAL, false);
recyclerTest.setLayoutManager(gridLayoutRecyclerview);
SnapHelper snapHelper = new GravitySnapHelper(Gravity.START);
snapHelper.attachToRecyclerView(recyclerTest);
recyclerTest.setAdapter(new RecyclerViewAdapter(this, items));
}
}
Почему элементы recyclerview заполняются вертикально?
1 4 2 5 3 6
A RecyclerView предназначен для списков, которые прокручиваются. Если у вас горизонтальный макет, он заполнит первый столбец, затем второй, затем третий и т.д. В конце концов, как мы ожидаем, что список будет работать. И вот почему "нумерация выключена". Он начинается с первого столбца, переходя к следующему после его заполнения.
Когда мой счетчик элементов равен 6, как мне избежать пространства между строками?
Я не знаю вашу настройку, но я предполагаю, что высота recyclerviews установлена на match_parent
, поэтому она, вероятно, просто использует всю доступную высоту. wrap_content
высота для recyclerview может помочь.
Когда мои вещи говорят 4, я хочу показать свои предметы как
1 2 3 4
или
1 3 4 2
Опять же, см. выше, что не работает RecyclerView. Он всегда будет заполнять столбцы один за другим, а не начинаться с строки. 4 Элементы с числом столбцов 2 всегда будут заполнять первые столбцы, как показано ниже.
1 3
2 4
RecyclerView может не соответствовать всем вашим потребностям. Вы можете переключиться на макет сетки вертикальный с 3 столбцами с менее чем 9 элементами. Таким образом, он не будет прокручиваться горизонтально, и он даже заполнит взгляды, как вы описали. Для более чем 9 элементов вы все равно будете показывать горизонтальную версию и прокрутите ее.
То, что вы на самом деле описываете, - это настраиваемый макет: вам нужно представление, которое ведет себя определенным образом. Вы могли бы посмотреть, как создать свой собственный ViewGroup
и использовать это, чтобы выложить все виды, как вам нравится. Если вы не хотите показывать длинные списки, это может быть хорошим альтернативным вариантом.