我有以下源代码,这是一个可扩展的列表,它有一个子列表,它有一些视图,如图像按钮,图像按钮,我想对这些视图进行事件处理。请 为我提供以下内容的源代码。
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;
}
}
}
答案 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();