entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

1voto

Ingresar un arreglo a un Custom Gridview

Tengo un gridview en mi layout:

<FrameLayout 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:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:paddingBottom="@dimen/activity_vertical_margin" android:orientation="vertical" tools:context="mx.appco.RevistaPremisa.CrucigramaFragment">

    <GridView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/gridViewLayout" android:layout_alignParentTop="true" android:layout_centerHorizontal="true">

</FrameLayout>

Bien, a ese Gridview le creo celdas programáticamente por medio de un adapter y se lo asigno con gridview.setAdapter(gridViewElement);:

 @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {

        View rootview = inflater.inflate(R.layout.fragment_crucigrama, container, false);

        grid = (GridView) rootview.findViewById(R.id.gridViewLayout);

        grid.setNumColumns(13);

        gridViewElement = new CustomGridViewAdapter(getActivity());

        grid.setAdapter(gridViewElement);//Aquí le asigno el adapter

        return rootview;
    }

Eso me funciona bien, pero ahora quiero meterle datos de un arreglo, para hacerlo se hace lo siguiente:

 String [] miArreglo;

        ArrayAdapter<String> adapter = new ArrayAdapter<String>(context,
                android.R.layout.simple_list_item_1, miArreglo);

Y de igual manera se le asigna el adapter:

grid.setAdapter(adapter);

El problema es que solo puedes asignarle un Adapter, Mi duda es esa:

¿Cómo ingresar datos de un arreglo a un custom GridView quue se genera también por un adapter?

ACTUALIZACIÓN

Esta es la clase CustomGridViewAdapter:

public class CustomGridViewAdapter extends BaseAdapter
{
    Context context;

    public CustomGridViewAdapter(Context context)
    {
        //super(context, 0);
        this.context=context;

    }

    public int getCount()
    {
        return 169;
    }

    @Override
    public Object getItem(int position) {
        return null;
    }

    @Override
    public long getItemId(int position) {
        return 0;
    }

    @TargetApi(Build.VERSION_CODES.JELLY_BEAN)
    @Override
    public View getView(int position, View convertView, ViewGroup parent)
    {
        View row = convertView;
     //Cargo un Custom Edittext en cada celda
            LayoutInflater inflater = ((Activity) context).getLayoutInflater();
            row = inflater.inflate(R.layout.grid_item, parent, false);

            EditText editTextCelda = (EditText) row.findViewById(R.id.gridEdittext);
            editTextCelda.setGravity(Gravity.TOP | Gravity.LEFT);

            final int sdk = Build.VERSION.SDK_INT;

        if (editTextCelda.getText().toString().trim().equals(""))
        {
            if(sdk < Build.VERSION_CODES.JELLY_BEAN) {
                editTextCelda.setBackgroundDrawable(context.getResources().getDrawable(R.drawable.rounded_edittext));
            } else {
                editTextCelda.setBackground( context.getResources().getDrawable(R.drawable.rounded_edittext));
            }

        } else{
            editTextCelda.setBackgroundColor(Color.WHITE);
        }

        return row;

    }

}

1 Respuesta

0voto

cobasESP Puntos19430

La única solución es añadir el arreglo al array original al que esta ligado el adapter y hacer un adapter.notifyAllChanges() o notifyAll();

De esta manera se refresca solo, de la otra forma tendrías que poner el arreglo en el adaptador y perderías lo que ya tienes en el.

x4mp73r comentado Jun 9, 2016

Ok, ¿Pero en este caso no uso ArrayAdapter si no BaseAdapter? He modificado mi pregunta y he colocado la clase del adapter

cobasESP comentado Jun 9, 2016

no uso mucha base adapter pero debería tener un sistema de refresco parecido

x4mp73r comentado Jun 9, 2016

Ah ok, y ¿Cómo se añade el el arreglo a la clase adapter, la cual me genera ltems?

cobasESP comentado Jun 10, 2016

El BaseAdapter usa el mismo método que el ArrayAdapter, aqui te dejo el link de todas las funciones https://developer.android.com/reference/android/widget/BaseAdapter.html?hl=es

Deberías poner el adapter como global y private al principio de la clase para poder acceder a él desde cualquier sitio. Y debes hacer el arreglo directamente al arraylist que usas en el base adapter, y acto seguido llamar a adapter.notifyDataSetChanged();

Por favor, accede o regístrate para responder a esta pregunta.

¿Conoces alguien que puede responder?
¡Comparte esta pregunta!


Actividad Reciente

¿Eres Usuario Apple?

...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta