2011-08-20 2 views
0

J'ai utilisé une ListActivity pour afficher une vue, gonflée à partir d'un fichier de mise en page XML. Lorsque j'affiche initialement cette vue dans la liste, je masque une partie de la vue en définissant la propriété visible de la vue cible sur View.GONE. Dans la méthode onListItemClick, je définis la visibilité de cette vue 'cachée' sur View.GONE, si elle est visible. Au clic suivant, je veux à nouveau masquer la vue. Pour ce faire, je détecte la visibilité de la vue et la modifie en View.GONE si elle est View.VISIBLE.OnListItemClick n'est pas (toujours) appelé avec ListActivity

Mon code exécute la méthode onListItemClick, lorsque la visibilité de la vue masquée est affichée sur View.GONE et affiche correctement la vue masquée lors du clic. Toutefois, il n'exécute pas la méthode onListItemClick lorsque la visibilité de la vue est définie sur View.VISIBLE.

Je comprends que cette situation est un bon candidat pour l'utilisation de ExpandableListActivity, mais je suis incapable de l'utiliser en raison d'un autre problème non résoluble!

est ici (partielle pertinente) Code:

public class MyListActivity extends ListActivity implements OnClickListener { 
// images that depict whether part of the view is visible or not 
private Drawable imgUp, imgDown; 

    private class MyOrderAdapter extends ArrayAdapter<Order> { 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
    View v = convertView; 
      if (v == null) { 
     LayoutInflater vi = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

     // infalte this view from xml 
     v = vi.inflate(R.layout.brief_order, null); 

     // display down arrow key depicting that more is available to be 
     // displayed when a user clicks on it. 
     ImageView arrow = (ImageView) v.findViewById(R.id.imgArrow); 

     // get a reference to the table layout for details 
     // which should not be displayed initially 
     TableLayout tb = (TableLayout) v.findViewById(R.id.view_detail); 

     // DO NOT DISPLAY PART OF THE VIEW INITIALLY  
     tb.setVisibility(View.GONE); 
    } 

    // code to initialize the text filed values in the view v 
    return v; 
    } 


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

     Log.d("MyList", "item click called"); 

     // RETRIEVE THE detail view 
     TableLayout tb = (TableLayout) v.findViewById(R.id.view_detail); 
    if(tb.getVisibility() == View.GONE) { 
     tb.setVisibility(View.VISIBLE); 
     img.setImageDrawable(imgUp); 
    } 
    else { 
     img.setImageDrawable(imgDown); 
     tb.setVisibility(View.GONE); 
    } 
} 

// rest of the code 
} 

Merci.

acclamations

Répondre

0

Mais juste au cas où, vous devez définir les images et d'autres éléments à l'intérieur de votre ListView ne pas focusable et la méthode onListItemClick seront invoquées.

Questions connexes