2011-04-12 49 views
1

我有以下源代码,这是一个Expandable列表,它有一个子列表,它具有一些像图像按钮,图像按钮,我想做事件处理这些观点。请给我 提供以下源代码。访问扩展名列表的子列表中的图像视图

public class ExpList extends ExpandableListActivity { ImageView imageView,heart; 查看查看; ArrayList count = new ArrayList(); //私有上下文上下文; ExpandableListAdapterDemo madapter; 静态最终字符串的色调[] []灰 { “Episode1” 的= {// 百叶窗 “Episode1”, “Episode1”, “Episode1”, “Episode1”},蓝色 {“Episode2的 //百叶窗“ ”Episode2“, ”Episode2“, ”Episode2“, ”Episode2“, ”Episode2“},
{ ”Episode3“, ”Episode3“, ”Episode3 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”}, {“Episode9”,“Episode9”,“Episode9”,“Episode9” , “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。首先我完全不明白,你想要什么。我不明白upvote :( – Tima 2011-04-13 11:31:19

+0

我想访问父列表中单击事件的子列表视图。 – Himanshu 2011-04-14 06:47:57

回答

0

我有一个解决方案给你,它很简单。 让我们使用两维数组来给你的适配器数据显示在视图中,所以当你想访问一个孩子中的数据来改变某些东西(可能是textview的字符串,Imageview的图像资源等)时,你只需要移除二维数组中与您的expandablelistview具有相同位置的元素,然后在该位置添加一个新元素,并在其中添加更改后的数据。然后调用adapter.notifyDataSetChanged(); 这有点难理解,所以看代码,应该看起来像:

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