Совместите элементы RecyclerView в каждой строке в Android
Я использую RecyclerView с StaggeredGridLayoutManager, чтобы показать таблицы курсов в моем приложении, и это было нормально, как на картинке ниже:
Но, как я могу настроить все элементы второго ряда, чтобы они начинались с одной строки, как на картинке ниже:
Это мой метод onCreateView() в моем фрагменте:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_orders, container, false);
recyclerView = (RecyclerView) rootView.findViewById(R.id.recycleView);
adapter = new MyCustomAdapter(getActivity(), Data.getData());
recyclerView.setAdapter(adapter);
// First param is number of columns and second param is orientation i.e Vertical or Horizontal
StaggeredGridLayoutManager gridLayoutManager = new StaggeredGridLayoutManager(3, StaggeredGridLayoutManager.VERTICAL);
recyclerView.setLayoutManager(gridLayoutManager);
return rootView;
}
}
И это может адаптер MyCustomAdapter.java:
public class MyCustomAdapter extends RecyclerView.Adapter<MyCustomAdapter.MyViewHolder> {
private Context _context;
private ArrayList<Information> data;
private LayoutInflater inflater;
private int previousPosition = 0;
public MyCustomAdapter(Context context, ArrayList<Information> data) {
this._context = context;
this.data = data;
inflater = LayoutInflater.from(context);
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int position) {
View view = inflater.inflate(R.layout.orders_row, parent, false);
MyViewHolder holder = new MyViewHolder(view);
return holder;
}
@Override
public void onBindViewHolder(MyViewHolder myViewHolder, final int position) {
if(position == 1){
create_tablelayout(myViewHolder.itemView,position,3);
}else if(position == 3){
create_tablelayout(myViewHolder.itemView,position,8);
}else if(position == 5){
create_tablelayout(myViewHolder.itemView,position,1);
}else
create_tablelayout(myViewHolder.itemView,position,5);
myViewHolder.num_tab.setText("Table # " + data.get(position).id);
myViewHolder.server.setText(data.get(position).server);
final Information infoData = data.get(position);
}
@Override
public int getItemCount() {
return data.size();
}
class MyViewHolder extends RecyclerView.ViewHolder{
TextView num_tab;
TextView server;
public MyViewHolder(View itemView) {
super(itemView);
num_tab = (TextView) itemView.findViewById(R.id.num_table);
server = (TextView) itemView.findViewById(R.id.server);
}
}
/* Find Tablelayout defined in main.xml */
TableLayout tablelayout = (TableLayout) convertView.findViewById(R.id.itemtablelayout);
tablelayout.removeAllViews();
for(int i = 0;i<nbr_item; i++) {
// Creating a new TextView
TextView Order1 = new TextView(_context);
Order1.setText("TESSST");
Order1.setTextColor(Color.parseColor("#FF9900"));
Order1.setTextSize(10);
Order1.setLayoutParams(new TableRow.LayoutParams
(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT));
//===================
//Prepare TableRow to be inserted
TableRow row = new TableRow(_context);
row.addView(Order1);
row.setPadding(4,4,4,4);
row.setGravity(Gravity.CENTER);
row.setLayoutParams(new TableLayout.LayoutParams
(LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.WRAP_CONTENT));
tablelayout.addView(row);
}
}
}
И это Фрагмент_orders.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/gray">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="10dp"
android:orientation="vertical">
<LinearLayout
android:layout_marginTop="10dp"
android:layout_width="match_parent"
android:background="@color/white"
android:layout_height="50dp">
</LinearLayout>
<android.support.v7.widget.RecyclerView
android:id="@+id/recycleView"
android:paddingLeft="@dimen/space"
android:paddingRight="@dimen/space"
android:layout_width="match_parent"
android:layout_height="match_parent">
</android.support.v7.widget.RecyclerView>
</LinearLayout>
</LinearLayout>
Пожалуйста, помогите мне, я потратил все свое время на эту проблему, но я не могу получить ничего подобного
1 ответ
Из прикрепленных скриншотов ваш случай, по-видимому, нуждается в GridLayoutManager вместо StaggeredGridLayoutManager.
Определите необходимое количество столбцов в вашем случае (3/4, при необходимости это может быть динамически рассчитано в соответствии с шириной устройства), а затем установите менеджер компоновки следующим образом:
// Assuming there'll be 3 columns
GridLayoutManager glm = new GridLayoutManager(getActivity(), 3);
recyclerView.setLayoutManager(glm);