2011-04-12 17 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();