访问“可扩展”列表的“子级”列表中的“图像”视图

时间:2011-04-12 10:54:01

标签: android listview

我有以下源代码,这是一个可扩展的列表,它有一个子列表,它有一些视图,如图像按钮,图像按钮,我想对这些视图进行事件处理。请 为我提供以下内容的源代码。

public class ExpList extends ExpandableListActivity {     ImageView imageView,心脏;     查看视图;     ArrayList count = new ArrayList();     //私有上下文上下文;     ExpandableListAdapterDemo madapter;     static final String shades [] [] = {             // 灰色的影子             {“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”,“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;
    }

}

}

1 个答案:

答案 0 :(得分: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();