2012-05-21 14 views
5

Sono bloccato con la creazione di un adattatore personalizzato. Voglio impostareOnClickListener sui pulsanti all'interno di ListView e ho trovato questo argomento che sembra ok how-to-setonclicklistener-on-the-button-inside-the-listview ma il problema è che sto ricevendo un errore di codice irraggiungibile sulla linea getLayoutInflater.getLayoutInflater all'interno di custom simpleCursorAdapter

Ecco il mio codice

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; 

    } 

} 

entrambi i metodi non funziona per me

LayoutInflater inflater = context.getLayoutInflater(); 

e

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

Can u plz mostrano l'errore di registro ........... – c2dm

risposta

11

Prova:

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

Inoltre, quale eccezione ottieni?


Edit: nel metodo "GetView", la prima linea è "ritorno .....", per cui non sarà mai eseguito il resto del tuo metodo, credo ....;)

+0

Ye ho perso il ritorno sul principio .. Grazie;) – Greg

2

Da un punto di vista delle prestazioni:

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

è corretta; ma è più efficiente immagazzinare l'inflator in un campo finale all'interno dell'adattatore.

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); 
} 

Quindi eseguire l'operazione getView.

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

Inoltre, assicurarsi di contesto è vostro contesto di attività, si otterrà problemi Theming se si utilizza il contesto sbagliato.

saluti, Chris

Problemi correlati