2012-06-06 15 views
25

Ho un ListView personalizzato con il mio adattatore. Sto gestendo il clic su un Button nel mio articolo ListView e voglio che lo ListView diventi invisibile con questo clic.Come accedere a ListView dall'adattatore

Non ho idea di come accedere allo ListView dall'adattatore.

public class ScheduleArrayAdapter extends ArrayAdapter<ScheduleListItem> { 

    /*...*/ 
    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     View v = convertView; 
     if (v == null) { 
      LayoutInflater vi = (LayoutInflater)c.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      v = vi.inflate(id, null); 
     } 
     final ScheduleListItem o = items.get(position); 
     if (o != null) { 

     /*...*/   

      Button details=(Button)v.findViewById(R.id.btn_details); 
      details.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        //HOW TO MAKE (R.id.lv_schedule) TO BECOME INVISIBLE HERE? 
       } 
      }); 
     } 
     return v; 
    } 
} 
+0

ho pensato che l'intero punto di avere un adattatore è quello di separare la logica da ListView. – sudocoder

risposta

64

ViewGroup parent tiene riferimento al genitore del View restituito da getView(), che nel tuo caso è il vostro ListView personalizzato.

@Override 
public View getView(int position, View convertView, final ViewGroup parent) { 
    ... 
    details.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      parent.setVisibility(View.INVISIBLE); // or View.GONE 
     } 
    }); 
    ... 
    return v; 
} 
8

Invece di questo è possibile passare il riferimento di Listview tramite il costruttore della scheda e archiviarlo nella variabile Listview locale. È possibile utilizzare questo per l'accesso tuo listviews method.Like questo

public ViewPackagesAdapter(Activity mActivity, ListView cmgListView) { 
     this.mActivity = mActivity; 
     this.mListView=cmgListView; 
    } 

ora accedere Listview di attività attraverso mListView ..

0

Nel mio caso GridItemClickListner non ha funzionato per qualche ragione. Accedo al GridView dalla classe adattatore utilizzare questo

public View getView(final int position, View convertView, ViewGroup parent) { 
     convertView.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      ((ClockGridView) v.getParent()).performItemClick(v, position, v.getId()); 
         (OR) 
      ((ClockGridView)parent).performItemClick(v, position, v.getId()); 
    } 
}); 
} 

"ClockGridView" che si estende "GridView" Class.