2012-05-21 14 views
5

Estoy atascado con la creación de un adaptador personalizado. Quiero establecer OnClickListener en los botones dentro de ListView y encontré este tema que se ve bien how-to-setonclicklistener-on-the-button-inside-the-listview pero el problema es que estoy obteniendo un error de código inalcanzable en la línea getLayoutInflater.getLayoutInflater dentro de custom simpleCursorAdapter

aquí es mi código

public class MyCursorAdapter extends SimpleCursorAdapter{ 

    private final Context ctx; 
    private Button tagButton = null; 

    public MyCursorAdapter(Context context, int layout, Cursor c, 
      String[] from, int[] to) { 
     super(context, layout, c, from, to); 
     ctx = context; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     return super.getView(position, convertView, parent); 
     LayoutInflater li = (LayoutInflater) ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     View rowView = li.inflate(R.layout.tags_list_element, null, true); 
     tagButton= (Button)rowView.findViewById(R.id.tag_title); 
     tagButton.setTag(position); 

     tagButton.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View arg0) { 
      } 
     }); 
     return rowView; 

    } 

} 

ambos métodos no funciona para mí

LayoutInflater inflater = context.getLayoutInflater(); 

y

LayoutInflater li = (LayoutInflater) ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
+0

Can u plz muestran el error de registro ........... – c2dm

Respuesta

11

Probar:

View myView = LayoutInflater.from(ctx).inflate(R.layout.my_view, null); 

Además, ¿qué excepción obtienes?


Editar: En el método de "getView", la primera línea es "retorno .....", por lo que el resto de su método no siempre va a ser ejecutado, creo ....;)

+0

YE I perdió la rentabilidad del principio .. Gracias;) – Greg

2

Desde el punto de vista del rendimiento:

View myView = LayoutInflater.from(context).inflate(R.layout.my_view, parent, false); 

es correcta; pero es más eficiente almacenar el inflador en un campo final dentro del adaptador.

private final Context ctx; 
private final LayoutInflater mInflater; 
private Button tagButton = null; 

public MyCursorAdapter(Context context, int layout, Cursor c, 
      String[] from, int[] to) { 
    super(context, layout, c, from, to); 
    ctx = context; 
    mInflater = LayoutInflater.from(ctx); 
} 

Luego haga su operación getView.

//.... 
final View v = mInflater.inflate(R.layout.list_item, parent, false); 
//.... 
//stuff here 
// 
return v; 

TAMBIÉN asegúrese de que el contexto es su contexto de actividad, obtendrá problemas de temática si utiliza el contexto incorrecto.

Saludos, Chris

Cuestiones relacionadas