Recycler View con GridLayoutManager horizontal El desplazamiento no funciona
tengo una actividad, que incluye un fragmento. Este fragmento incluye un Recycler View. Quiero que muestre los datos de un juego en una cuadrícula. Lo necesito para desplazarse hacia abajo (cada ronda del juego es una fila), pero también horizontal, porque necesito 5 – 10 Columnas. Cuando id use el parámetro android: scrollbars = "vertical | horizontal" en la vista del reciclador sólo se desplaza hacia abajo y hace que la columna sea muy pequeña. Esto ocurre incluso cuando lo pongo solo en horizontal.
Cómo no debe mirar.
- ¿Cómo agregar una vista personalizada al diseño?
- Arregle dinámicamente los botones alrededor de un círculo
- Cómo ejecutar "callOnClick ()" para Android API 8?
- El fragmento dentro de VideoView hace que la pantalla negra se deslice
- Android 5.0, cómo desplazar la cuadrícula a una posición fija mediante Etsy StaggeredGridView
Código: Actividad
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.sb.matt.doppelkopf.activities.GameActivity"> <fragment android:id="@+id/fragment_game" android:layout_width="match_parent" android:layout_height="match_parent" class="com.sb.matt.doppelkopf.fragments.game_fragment" tools:layout="@layout/fragment_game"> </fragment> </RelativeLayout>
El fragmento
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.sb.matt.doppelkopf.fragments.game_fragment"> <android.support.v7.widget.RecyclerView android:id="@+id/recyclerView_gameData" android:scrollbars="horizontal" android:layout_width="match_parent" android:layout_height="match_parent"/> </RelativeLayout>
La vista de los elementos en la vista del reciclador
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="400dp" android:layout_height="200dp"> <TextView android:layout_width="400dp" android:layout_height="200dp" android:textAppearance="?android:attr/textAppearanceMedium" android:text="Test" android:id="@+id/txt_inhalt" android:layout_centerVertical="true" android:layout_marginTop="5dp" android:layout_marginBottom="5dp" android:layout_alignParentRight="true" android:layout_alignParentEnd="true" android:layout_alignParentLeft="true" android:layout_alignParentStart="true"/> </RelativeLayout>
Código del fragmento
package com.sb.matt.doppelkopf.fragments; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v7.widget.GridLayoutManager; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import com.sb.matt.doppelkopf.R; import com.sb.matt.doppelkopf.activities.GameActivity; import com.sb.matt.doppelkopf.adapters.GameData_Adapter; import com.sb.matt.doppelkopf.data.GameData; /** * A simple {@link Fragment} subclass. */ public class game_fragment extends Fragment { private GameData gameData; private RecyclerView rGridView; GameData_Adapter adapter; public game_fragment() { // Required empty public constructor } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment final View v = inflater.inflate(R.layout.fragment_game, container, false); gameData = ((GameActivity)getActivity()).getGameData(); return v; } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); String[][] gameData = ((GameActivity) getActivity()).getGameData().getViewData(); rGridView = (RecyclerView) getActivity().findViewById(R.id.recyclerView_gameData); rGridView.setLayoutManager(new GridLayoutManager(getActivity(), gameData[0].length)); adapter = new GameData_Adapter(gameData); rGridView.setAdapter(adapter); } }
Código del adaptador, su utiliza una matriz 2 dimensional para llenar la rejilla.
package com.sb.matt.doppelkopf.adapters; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import com.sb.matt.doppelkopf.R; import com.sb.matt.doppelkopf.data.SingleGameDataItem; import java.util.ArrayList; /** * Created by matts on 16.01.2016. */ public class GameData_Adapter extends RecyclerView.Adapter<GameData_Adapter.ViewHolder> { private String[][] gameData; private ArrayList<SingleGameDataItem> list; public static class ViewHolder extends RecyclerView.ViewHolder { View MyView; TextView textView; public ViewHolder(View view) { super(view); MyView = view; textView = (TextView) view.findViewById(R.id.txt_inhalt); } } public GameData_Adapter (String[][] gameData) { this.gameData = gameData; list = new ArrayList<SingleGameDataItem>(); for(int i = 0; i < gameData.length; i++) { for(int j = 0; j < gameData[0].length; j++) { SingleGameDataItem item = new SingleGameDataItem(gameData[i][j]); list.add(item); } } } @Override public GameData_Adapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { // create a new view View v = LayoutInflater.from(parent.getContext()) .inflate(R.layout.singlegamedataitem, parent, false); // set the view's size, margins, paddings and layout parameters ViewHolder vh = new ViewHolder(v); return vh; } // Replace the contents of a view (invoked by the layout manager) @Override public void onBindViewHolder(ViewHolder holder, int position) { // - get element from your dataset at this position // - replace the contents of the view with that element holder.textView.setText(list.get(position).getInhalt()); } @Override public int getItemCount() { return list.size(); } }
que estoy haciendo mal? : /
- Un archivo .apk que instala dos aplicaciones
- Flotar vistas para que no ocupen espacio en el diseño
- ¿Se puede usar una vista personalizada como TabItem?
- ¿Cómo mostrar el título del diálogo en una línea múltiple?
- Eliminar TextView predeterminado del nuevo diseño de la actividad
- Cómo tener selectableItemBackground en Imageview?
- Cómo crear una VISTA DE TAB en Android Layout
- Glide hace que ImageView wrap_content sea inútil y sin animatiion usando target
Se utilizó incorrecto constructor new GridLayoutManager(getActivity(), gameData[0].length)
. Javadoc dice que "Crea un GridLayoutManager vertical ".
Intente new GridLayoutManager(getActivity(), 1, GridLayoutManager.HORIZONTAL, false)
lugar.
Aquí 1
cuenta como número de filas.
- Problemas enfocando EditTexts en un ListView (Android)
- Cómo cambiar el color de acento de fondo de TextView en la aplicación de Android NativeScript