2011-02-10 1 views
1

J'ai une liste extensible avec des groupes et des enfants. Chaque enfant est de classe TableRow en tenant l'image, le texte et une autre image. Sa largeur est inférieure à la largeur du groupe ce qui conduit à décaler avant et après la ligne enfant. Le problème est que lorsque vous touchez l'enfant, la zone décalée est sélectionnée et la zone enfant réelle reste intacte. J'ai besoin d'un effet opposé lorsque seule la zone enfant est sélectionnée.Problème de sélection d'un fichier extensible dans Android

Répondre

1

Ok. Trouvé une solution.

  1. handicapés isChildSelectable:

    public boolean isChildSelectable(int groupPosition, int childPosition) {    
        return false;   
    } 
    
  2. Mis en œuvre mon onTouchListener dans getChildView:

    public View getChildView(final int groupPosition, final int childPosition, boolean isLastChild,     
         View convertView, ViewGroup parent) 
    { 
        parent.setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS); 
        View childView = getMyView(); 
    
        childView.setOnTouchListener(new OnTouchListener(){ 
         @Override 
         public boolean onTouch(View view, MotionEvent event) { 
    
          if (event.getAction() == MotionEvent.ACTION_DOWN) 
          {      
           view.setBackgroundColor(Color.BLUE);       
           return true; 
          } 
          if (event.getAction() == MotionEvent.ACTION_UP) 
          { 
           view.setBackgroundColor(Color.WHITE); 
           return true; 
          } 
          if (event.getAction() == MotionEvent.ACTION_OUTSIDE) 
          { 
           view.setBackgroundColor(Color.WHITE); 
           return true; 
          } 
          if (event.getAction() == MotionEvent.ACTION_CANCEL) 
          { 
           view.setBackgroundColor(Color.WHITE); 
           return true; 
          } 
          return false; 
         }    
        }); 
        LinearLayout newView = new LinearLayout(context); 
        newView.setPadding(15, 0, 15, 0); 
        newView.addView(childView); 
        return newView; 
    }