2011-04-12 2 views
1

J'ai le code source suivant, ceci est une liste extensible, il a une liste d'enfants, qui a une certaine vue comme bouton Image, bouton Image, je veux faire la gestion des événements sur ces vues. s'il vous plaît me fournir le code source pour ce qui suit.Accès à la vue Image dans la liste des enfants de la liste extensible

La classe publique ExpList étend ExpandableListActivity { ImageView imageView, heart; Voir la vue; ArrayList count = new ArrayList(); // contexte Contexte privé; ExpandableListAdapterDemo madapter; finale nuances de cordes statiques [] [] = {// nuances de gris { "Episode1", "Episode1", "Episode1", "Episode1", "Episode1"}, // Shades of blue { « Episode2 " "Episode2", "Episode2", "Episode2", "Episode2", "Episode2"}, {
"Episode3", "Episode3", "Episode3"}, // nuances de rouge {" Episode4 "," Episode4 "," Episode4 "," Episode4 "}, {" Episode5 "," Episode5 "," Episode5 "," Episode5 "}, {" Episode6 "," Episode6 "," Episode6 "," Episode6 " "," Episode6 ", " Episode6 "}, {" Episode7 "," Episode7 "," Episode7 "," Episode7 "," Episode7 ", "Episode7"}, {"Episode8", "Episode8", "Episode8", "Episode8", "Episode8"}, {"Épisode 9", "Épisode 9", "Épisode 9", "Épisode 9", "Épisode 9" , "Episode9", "Episode9"}, { "Episode10", "Episode10", "Episode10", "Episode10", "Episode10", "Episode10", "Episode10", "Episode10"}

}; 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle icicle) { 
    super.onCreate(icicle); 
    requestWindowFeature(Window.FEATURE_NO_TITLE); 

    setContentView(R.layout.main); 
    Log.i("ARRy lentgh_____________", " " + shades.length); 
    for (int n = 0; n < shades.length; n++) { 

     count.add(Integer.toString(shades[n].length)); 
     Log.i("item y lentgh_____________", " " + shades[n].length); 
    } 
    for (int n = 0; n < count.size(); n++) { 
     Log.i("List Elements are_____________", " " + count.get(n)); 
     // count.add(Integer.toString(shades[n].length)); 
    } 
    madapter= new ExpandableListAdapterDemo(this,createGroupList(),createChildList()); 
    SimpleExpandableListAdapter expListAdapter = new SimpleExpandableListAdapter(
      this, createGroupList(), // groupData describes the first-level 
             // entries 
      R.layout.parent_row, // Layout for the first-level entries 
      new String[] { "count" }, // Key in the groupData maps to 
             // display 
      new int[] { R.id.episode_count }, // Data under "colorName" key 
               // goes into this TextView 
      createChildList(), // childData describes second-level entries 
      R.layout.child_row, // Layout for second-level entries 
      new String[] { "shadeName" }, // Keys in childData maps to 
              // display 
      new int[] { R.id.childname } // Data under the keys above go 
              // into these TextViews 
    ); 

    setListAdapter(expListAdapter); 

    final ExpandableListView exlv = this.getExpandableListView(); 
    Log.i("exlv.getWidth():widthhhhhhhhh", "" + exlv.getWidth() + 50); 
    exlv.setIndicatorBounds(exlv.getWidth() + 30, exlv.getWidth() + 520); 


    exlv.setOnGroupExpandListener(new OnGroupExpandListener() { 

     @Override 
     public void onGroupExpand(int arg0) { 
      // TODO Auto-generated method stub 
      Log.i("Group Expand id is ", " " + exlv.getChildAt(arg0)+"Count is "+exlv.getChildCount() 
        + " "); 
      LinearLayout linearLayout= (LinearLayout) exlv.getChildAt(arg0); 
      //LinearLayout linearLayout= (LinearLayout)findViewById(R.layout.child_row); 
      Log.i("Linear layout is ", " " + linearLayout 
        + " "); 
      imageView= (ImageView)linearLayout.findViewById(R.id.imageView2); 

      Log.i("Image view id is ", " " + imageView 
        + " "); 

     } 
    }); 
    exlv.setOnGroupClickListener(new OnGroupClickListener() { 

     @Override 
     public boolean onGroupClick(ExpandableListView arg0, View arg1, 
       int arg2, long arg3) { 

      LinearLayout linearLayout= (LinearLayout) arg0.getChildAt(arg2); 

      imageView= (ImageView)linearLayout.findViewById(R.id.imageView2); 
      Log.i("Image view id is ", " " + imageView 
        + " "); 
      Log.i("View is", ";;;;;;;;;;;; " + arg1.findViewById(R.id.imageView2) 
        + " layout "+linearLayout+"image id on group "+imageView); 
      Toast.makeText(getBaseContext(), "Group clicked ", 
        Toast.LENGTH_SHORT).show(); 

      return false; 
     } 
    }); 

    exlv.setOnChildClickListener(new OnChildClickListener() { 

     public boolean onChildClick(ExpandableListView arg0, View arg1, 
       int arg2, int arg3, long arg4) { 


      Toast.makeText(ExpList.this, 
        "Child ItemClicked " + arg2 + " " + arg3, 
        Toast.LENGTH_SHORT).show(); 

      imageView = (ImageView)arg1.findViewById(R.id.imageView2); 
      Log.i("ImageView Value "," hi "+imageView.toString()); 
       imageView.setOnClickListener(new OnClickListener() { 

       @Override public void onClick(View arg0) { // TODO Auto-generated 
        Intent intent = new Intent(ExpList.this,DemoActivity.class); 
        startActivity(intent); 
      } }); 


      // TODO Auto-generated method stub 
      return false; 
     } 
    }); 

    /* 
    * imageView.setOnClickListener(new OnClickListener() { 
    * 
    * @Override public void onClick(View arg0) { // TODO Auto-generated 
    * method stub Intent intent = new 
    * Intent(ExpList.this,DemoActivity.class); startActivity(intent); } }); 
    */ 

    for (int n = 0; n < count.size(); n++) { 
     Log.i("Values of episode is ", " " + count.get(n)); 
    } 

} 
/** 
* Creates the group list out of the colors[] array according to the 
* structure required by SimpleExpandableListAdapter. The resulting List 
* contains Maps. Each Map contains one entry with key "colorName" and value 
* of an entry in the colors[] array. 
*/ 

private List createGroupList() { 
    ArrayList result = new ArrayList(); 

    Log.i("size of count is", " " + count.size()); 
    for (int i = 0; i < shades.length; i++) { 
     HashMap m = new HashMap(); 
     m.put("count", count.get(i)); 
     result.add(m); 
    } 
    return result; 
} 
/** 
* Creates the child list out of the shades[] array according to the 
* structure required by SimpleExpandableListAdapter. The resulting List 
* contains one list for each group. Each such second-level group contains 
* Maps. Each such Map contains two keys: "shadeName" is the name of the 
* shade and "rgb" is the RGB value for the shade. 
*/ 
private List createChildList() { 
    ArrayList result = new ArrayList(); 
    Log.i("two dim Array Size is ", " Size is " + shades.length); 
    for (int i = 0; i < shades.length; ++i) { 
     // Second-level lists 
     ArrayList secList = new ArrayList(); 
     for (int j = 0; j < shades[i].length; j++) { 

      HashMap child = new HashMap(); 
      child.put("shadeName", shades[i][j]); 
      secList.add(child); 
     } 
     result.add(secList); 
    } 
    return result; 
} 

public class ExpandableListAdapterDemo extends BaseExpandableListAdapter { 

    @Override 
    public boolean areAllItemsEnabled() { 
     return true; 
    } 
    private Context context; 
    private ArrayList<String> groups; 
    private ArrayList<ArrayList> children; 
     public ExpandableListAdapterDemo(Context context, List groups, List chiildren) 
     { 
      this.context = context; 
      this.groups = (ArrayList<String>) groups; 
      this.children = (ArrayList<ArrayList>) chiildren; 
     } 
     /** 
    * A general add method, that allows you to add a Vehicle to this list 
    * 
    * Depending on if the category opf the vehicle is present or not, the 
    * corresponding item will either be added to an existing group if it 
    * exists, else the group will be created and then the item will be 
    * added 
    * 
    * @param vehicle 
    */ 

    @Override 
    public Object getChild(int groupPosition, int childPosition) { 
     return children.get(groupPosition).get(childPosition); 
    } 

    @Override 
    public long getChildId(int groupPosition, int childPosition) { 
     return childPosition; 
    } 

    // Return a child view. You can load your custom layout here. 
    @Override 
    public View getChildView(int groupPosition, int childPosition, 
      boolean isLastChild, View convertView, ViewGroup parent) { 


     ImageView tv = (ImageView) convertView 
       .findViewById(R.id.imageView2); 
     tv.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View arg0) { 
       Log.i("hiiiiiiiiiiiiiiiii","image clicked"); 
       Intent intent = new Intent(ExpList.this, DemoActivity.class); 
       startActivity(intent); 
      } 
     }); 


     return convertView; 
    } 

    @Override 
    public int getChildrenCount(int groupPosition) { 
     return children.get(groupPosition).size(); 
    } 

    @Override 
    public Object getGroup(int groupPosition) { 
     return groups.get(groupPosition); 
    } 

    @Override 
    public int getGroupCount() { 
     return groups.size(); 
    } 

    @Override 
    public long getGroupId(int groupPosition) { 
     return groupPosition; 
    } 

    // Return a group view. You can load your custom layout here. 
    @Override 
    public View getGroupView(int groupPosition, boolean isExpanded, 
      View convertView, ViewGroup parent) { 
     // String group = (String) getGroup(groupPosition); 

     return convertView; 
    } 

    @Override 
    public boolean hasStableIds() { 
     return true; 
    } 

    @Override 
    public boolean isChildSelectable(int arg0, int arg1) { 
     return true; 
    } 

} 

}

+0

o_O omg. D'abord je ne comprends pas du tout, que veux-tu? Et je ne comprends pas le upvote :( – Tima

+0

je veux accéder à la vue de la liste des enfants sur l'événement de clic de la liste des parents. – Himanshu

Répondre

0

J'ai une solution pour vous, c'est tellement simple. Utilisons un tableau à deux dimensions pour afficher les données de votre adaptateur dans les vues, donc quand vous voulez accéder aux données d'un enfant pour changer quelque chose (peut-être une chaîne de textview, ressource d'image de Imageview, etc.), il vous suffit de supprimer l'élément du tableau à deux dimensions qui a la même position que dans votre liste expandelist, puis ajoutez un nouvel élément avec les données modifiées à cette position également. Puis appelez adapter.notifyDataSetChanged(); C'est un peu difficile à comprendre, alors voyez le code, il devrait ressembler à:

 childs.get(1).remove(1); 
    childs.get(1).add(1, new ChildData("changed textview", BitmapFactory.decodeResource(getResources(), R.drawable.no_avatar))); 
    adapter.notifyDataSetChanged(); 
Questions connexes