2012-06-06 32 views
25

Tengo un ListView personalizado con mi propio adaptador. Estoy manejando el clic en Button en mi artículo ListView, y quiero que el ListView se vuelva invisible en este clic.¿Cómo accedo a ListView desde el adaptador?

No tengo idea de cómo acceder al ListView desde el adaptador.

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

pensé que el objetivo de tener un adaptador es desacoplar la lógica de ListView. – sudocoder

Respuesta

64

ViewGroup parent sostiene referencia a la matriz de la View devuelto por getView(), que en su caso es su vista de lista personalizada.

@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

En lugar de esto, puede pasar la referencia de su Listview a través de un constructor de adaptador y almacenarlo en la variable Listview local. Usted puede usar esto para acceder a su listviews method.Like este

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

Ahora acceder Listview de actividad a través de mListView ..

0

En mi caso GridItemClickListner no funcionó por alguna razón. Accedo a la Gridview de la clase adaptador usar este

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" que se extiende Clase "GridView".

Cuestiones relacionadas