web-dev-qa-db-fra.com

Comment puis-je accéder à ListView à partir de l'adaptateur

J'ai une ListView personnalisée avec mon propre adaptateur. Je gère le clic sur une Button dans mon article ListView et je veux que la ListView devienne invisible sur ce clic.

Je ne sais pas comment accéder à ListView depuis l'adaptateur.

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;
    }
}
25
user1049280

ViewGroup parent contient la référence au parent de la View renvoyée par getView(), qui dans votre cas est votre liste personnalisée.

@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;
}
65
Vladimir

Au lieu de cela, vous pouvez transmettre la référence de votre Listview au constructeur de l'adaptateur et la stocker dans la variable locale Listview. Vous pouvez utiliser ceci pour accéder à votre méthode Listviews.

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

Accédez maintenant à Listview d'Activité via mListView ..

8
Pramod

Dans mon cas, GridItemClickListner n'a pas fonctionné pour une raison quelconque. J'accède au Gridview de la classe Adapter en utilisant cette

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" qui étend la classe "GridView".

0
anand krish