Como tomar el valor seleccionado en Adapter personalizado

27 views
Skip to first unread message

Jeobel Muñoz

unread,
Oct 26, 2016, 9:13:01 PM10/26/16
to desarrolladores-android
Hola a todos:
Tengo un listview simple que me vi obligado a personalizarlo para efectos de cambiar el estilo :
parecido a lo que sugieren en este sitio:



**********************************

lleno los datos desde un webservice bueno eso no es el problema pero les doy mas o menos la estructua:
protected void onPostExecute(Boolean result) {
....
                      final int L = listaHistorial.length;
for(int i=0; i<listaHistorial.length; i++)
      {
 
data1[i] = listaHistorial[i].asignatura.trim();
data2[i] = listaHistorial[i].creditos;
data3[i] = listaHistorial[i].nf;
      }
 



setListAdapter(new MyAdapter(Historial_Academico_Grid.this,
                   R.layout.activity_historial_grid,
                   R.id.data1,
                   data1n,
                   data2n,
                   data3n));

...
}

*********************************************************
aqui personalizo el adapter


private static class MyAdapter extends ArrayAdapter<String> {
private String[] data1, data2, data3;
private Typeface tf;
public MyAdapter(Context context, int resource, int textViewResourceId,
String[] data1, String[] data2, String[] data3) {
super(context, resource, textViewResourceId, data2);
this.data1 = data1;
this.data2 = data2;
this.data3 = data3;
this.tf = Typeface.createFromAsset(context.getAssets(),
"fonts/segoeuil.ttf");
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = super.getView(position, convertView, parent);
if (position == 0) {
v.setBackgroundColor(Color.LTGRAY);
} else {v.setBackgroundResource(android.R.drawable.list_selector_background);}
TextView t1 = (TextView) v.findViewById(R.id.data1);
t1.setText(data1[position]);
t1.setTypeface(tf);
TextView t2 = (TextView) v.findViewById(R.id.data2);
t2.setText(data2[position]);
t2.setTypeface(tf);
TextView t3 = (TextView) v.findViewById(R.id.data3);
t3.setText(data3[position]);
t3.setTypeface(tf);
return v;

}

@Override
public boolean isEnabled(int position) {
return position == 0 ? false : true;
}

@Override
public String getItem(int position) {
// TODO Auto-generated method stub
return super.getItem(position);
}
**********************************************
View



<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
     android:background="@drawable/rectanguloopacou"
    android:orientation="horizontal" >


    
    <TextView
        android:id="@+id/data1"
        style="@style/DataGridText"
    
         android:gravity="center"
         android:layout_width="0dp"
         android:layout_height="match_parent"
         android:layout_margin="5dp"
         android:layout_weight="2"  />


        <TextView
        android:id="@+id/data2"
        style="@style/DataGridText"
    
         android:gravity="center"
         android:layout_width="0dp"
         android:layout_height="match_parent"
         android:layout_margin="5dp"
         android:layout_weight="1"  />
    
    


        <TextView
        android:id="@+id/data3"
        style="@style/DataGridText"
    
         android:gravity="center"
         android:layout_width="0dp"
         android:layout_height="match_parent"
         android:layout_margin="5dp"
         android:layout_weight="1"  />


</LinearLayout>

No he podido encontrar la forma de implementar  el evento OnClic dentro del adapter para que en el momento  que haga clic tome la posicio y el valor
del dat1, dat2 o dat3
ejemplo:
public View getView(int position, View convertView, ViewGroup parent) {

...
           (Esto no se donde implementarlo ni como hacerlo en el lisviiw simple se hace desde el evento OnCreate)
            @Override
            public void onClick(View v) {
                   valordata1 =  dat1(position));
                    valordata2 =  dat2(position));
                      valordata3 =  dat3(position));
}
...

}


Gracias de antemano.







Gabriel Pozo

unread,
Oct 26, 2016, 9:39:21 PM10/26/16
to desarrolladores-android

--
Para participar es necesario que leas detenidamente las normas del grupo: https://goo.gl/xeTRQm
---
Has recibido este mensaje porque estás suscrito al grupo "desarrolladores-android" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a desarrolladores-a...@googlegroups.com.
Para publicar en este grupo, envía un correo electrónico a desarrollad...@googlegroups.com.
Visita este grupo en https://groups.google.com/group/desarrolladores-android.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/desarrolladores-android/8b8defd0-7dc6-4bbe-b575-420f95a027fd%40googlegroups.com.
Para acceder a más opciones, visita https://groups.google.com/d/optout.

Jorge_SCB

unread,
Nov 11, 2016, 2:17:08 PM11/11/16
to desarrollad...@googlegroups.com
Si entendí lo que quieres lograr es disponer tus datos como una tabla o grilla, en dicho caso te recomendaría que uses el componente de GridView, utilizando un adapter personalizado que extiende BaseAdapter y con la forma que indico gabriel para capturar tu data.
 
Ahora  bien sobre lo que tienes hecho podrías usar la propiedad TAG que tienen los Views, esto dentro de tu metodo getView:

public View getView(int position, View convertView, ViewGroup parent) {
...
   TextView t1 = (TextView) v.findViewById(R.id.data1);
   t1.setText(data1[position]);
   t1.setTypeface(tf);

   t1.setTag(data1[position]);
   t2.setTag(data2[position]);
   t3.setTag(data3[position]);
   t1.setOnClickListener(onClickData);
   t2.setOnClickListener(onClickData);
   t3.setOnClickListener(onClickData);
...
}
        private OnClickListener onClickData = new OnClickListener() {

@Override
public void onClick(View v) {
String data = (String) v.getTag();
                        //Aqui haces lo que quieras con tu data
}
};
Reply all
Reply to author
Forward
0 new messages