8
votes

Ensemble OnClickListener pour les articles dans ListView avec 2 vues

J'ai une liste de réception, avec des éléments avec cette mise en page: xxx pré>

donc mes articles ont deux sections différentes. Je veux être capable de configurer différents Onclicklistener à l'intérieur de chaque article (un pour chaque linearlayout). J'ai essayé jusqu'à présent pour remplacer l'Onlistitemclick, mais cela ne semble pas fonctionner correctement: P>

    @Override
    protected void onListItemClick(ListView l, View v, int position, long id) { 
    super.onListItemClick(l, v, position, id);

    ViewGroup vg = (ViewGroup)v;
    vg.getChildAt(0).setOnClickListener(new OnClickListener() {         
        @Override
        public void onClick(View v) {
            Toast.makeText(mCtx, "element1", Toast.LENGTH_SHORT).show();                
        }
    });
    vg.getChildAt(1).setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            Toast.makeText(mCtx, "element2", Toast.LENGTH_SHORT).show();                
        }
    });

}


2 commentaires

Êtes-vous sûr que vg.getchildat (0) et vg.getchildat (1) retour linearlayout


Ce n'est pas important, ce que je veux maintenant, c'est de définir différents événements à l'article ListView.


3 Réponses :


1
votes

Vous n'avez pas besoin d'un onclicklistener pour chaque élément de liste, mais vous devez trouver chaque liste de réception, par exemple. Dans votre activité OnCreate XXX PRE>

, votre OnlistitemClick devient - P>

@Override
protected void onListItemClick(ListView l, View v, int position, long id) { 
super.onListItemClick(l, v, position, id);

if (l.equals(listView1))
{
    switch (position)
    {
       case 0:
         Toast.makeText(mCtx, "list1-element1", Toast.LENGTH_SHORT).show();
         break;
       case 1:
         Toast.makeText(mCtx, "list1-element2", Toast.LENGTH_SHORT).show();
         break;
    }
}
else
{
    switch (position)
    {
       case 0:
         Toast.makeText(mCtx, "list2-element1", Toast.LENGTH_SHORT).show();
         break;
       case 1:
         Toast.makeText(mCtx, "list2-element2", Toast.LENGTH_SHORT).show();
         break;
    }
}


}


0 commentaires

11
votes

Vous devez utiliser défini onclicklistener code> à tous les éléments de listView. J'ai créé une liste de liste. Définissez un adaptateur sur ListView. Mon adaptateur est représentable pour montrer chaque élément de la liste de liste. Donc, à l'intérieur GeveView () Code> Je vais attribuer OnClickListener à tous les élatements à qui je veux obtenir l'événement de clic.

Exemple H2>
public View getView(int position, View convertView, ViewGroup parent) {
        View vi=convertView;
        ViewHolder holder;
        if(convertView==null){
            vi = inflater.inflate(R.layout.item, null);
            holder=new ViewHolder();
            holder.text=(TextView)vi.findViewById(R.id.text);;
            holder.image=(ImageView)vi.findViewById(R.id.image);
            vi.setTag(holder);
        }
        else
            holder=(ViewHolder)vi.getTag();

        holder.text.setText("item "+position);
        holder.image.setTag(data.get(position));
        holder.image.setOnClickListener(this);
        holder.text.setOnClickListener(this);
        imageLoader.DisplayImage(data.get(position), activity, holder.image);
        return vi;
    }

    @Override
    public void onClick(View arg0) {
        // TODO Auto-generated method stub
        System.out.println("...clicked view is...."+arg0);
    }


0 commentaires

0
votes

Je serais peut-être en train de manquer quelque chose ici, mais la version nette n'est-elle pas à utiliser avec la définition: xxx

puis implémenter: xxx < p> Les solutions ci-dessus ont été disponibles depuis l'API Niveau 1


0 commentaires