logcat列出的错误如下:
03-28 05:22:46.422: E/AndroidRuntime(315): FATAL EXCEPTION: main
03-28 05:22:46.422: E/AndroidRuntime(315): java.lang.ClassCastException: android.widget.ImageView
03-28 05:22:46.422: E/AndroidRuntime(315): at android.widget.SimpleExpandableListAdapter.bindView(SimpleExpandableListAdapter.java:247)
03-28 05:22:46.422: E/AndroidRuntime(315): at android.widget.SimpleExpandableListAdapter.getChildView(SimpleExpandableListAdapter.java:229)
03-28 05:22:46.422: E/AndroidRuntime(315): at android.widget.ExpandableListConnector.getView(ExpandableListConnector.java:450)
03-28 05:22:46.422: E/AndroidRuntime(315): at android.widget.AbsListView.obtainView(AbsListView.java:1315)
03-28 05:22:46.422: E/AndroidRuntime(315): at android.widget.ListView.makeAndAddView(ListView.java:1727)
03-28 05:22:46.422: E/AndroidRuntime(315): at android.widget.ListView.fillDown(ListView.java:652)
03-28 05:22:46.422: E/AndroidRuntime(315): at android.widget.ListView.fillSpecific(ListView.java:1284)
03-28 05:22:46.422: E/AndroidRuntime(315): at android.widget.ListView.layoutChildren(ListView.java:1558)
03-28 05:22:46.422: E/AndroidRuntime(315): at android.widget.AbsListView.onLayout(AbsListView.java:1147)
03-28 05:22:46.422: E/AndroidRuntime(315): at android.view.View.layout(View.java:7035)
03-28 05:22:46.422: E/AndroidRuntime(315): at android.widget.RelativeLayout.onLayout(RelativeLayout.java:909)
03-28 05:22:46.422: E/AndroidRuntime(315): at android.view.View.layout(View.java:7035)
03-28 05:22:46.422: E/AndroidRuntime(315): at android.widget.FrameLayout.onLayout(FrameLayout.java:333)
03-28 05:22:46.422: E/AndroidRuntime(315): at android.view.View.layout(View.java:7035)
03-28 05:22:46.422: E/AndroidRuntime(315): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1249)
03-28 05:22:46.422: E/AndroidRuntime(315): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1125)
03-28 05:22:46.422: E/AndroidRuntime(315): at android.widget.LinearLayout.onLayout(LinearLayout.java:1042)
03-28 05:22:46.422: E/AndroidRuntime(315): at android.view.View.layout(View.java:7035)
03-28 05:22:46.422: E/AndroidRuntime(315): at android.widget.FrameLayout.onLayout(FrameLayout.java:333)
03-28 05:22:46.422: E/AndroidRuntime(315): at android.view.View.layout(View.java:7035)
03-28 05:22:46.422: E/AndroidRuntime(315): at android.view.ViewRoot.performTraversals(ViewRoot.java:1045)
03-28 05:22:46.422: E/AndroidRuntime(315): at android.view.ViewRoot.handleMessage(ViewRoot.java:1727)
03-28 05:22:46.422: E/AndroidRuntime(315): at android.os.Handler.dispatchMessage(Handler.java:99)
03-28 05:22:46.422: E/AndroidRuntime(315): at android.os.Looper.loop(Looper.java:123)
03-28 05:22:46.422: E/AndroidRuntime(315): at android.app.ActivityThread.main(ActivityThread.java:4627)
03-28 05:22:46.422: E/AndroidRuntime(315): at java.lang.reflect.Method.invokeNative(Native Method)
03-28 05:22:46.422: E/AndroidRuntime(315): at java.lang.reflect.Method.invoke(Method.java:521)
03-28 05:22:46.422: E/AndroidRuntime(315): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
03-28 05:22:46.422: E/AndroidRuntime(315): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
03-28 05:22:46.422: E/AndroidRuntime(315): at dalvik.system.NativeStart.main(Native Method)
源程序:
package mars.ExpandableListViewDemo;
import java.util.*;
import android.app.ExpandableListActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.*;public class ExpandableListViewDemoActivity extends ExpandableListActivity {
/** Called when the activity is first created. */
private int[] bookimgIds=
{
R.drawable.pic1,R.drawable.pic2,
R.drawable.pic3,R.drawable.pic4,
R.drawable.pic5
};
private int[]bookmsgIds=
{
R.string.title1,R.string.title2,
R.string.title3,R.string.title4,
R.string.title5
};
private int[]bookcontents=
{
R.string.content1,R.string.content2,
R.string.content3,R.string.content4,
R.string.content5
};
private static final int booknum = 5; //所显示书本内容的数量
private static final int productnum = 3;//所显示用具内容的数量
private Button backbutton = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//创建一级目录,list<>内不是放二级目录的格式,而是放一级目录自身需显示的内容的格式
//往一级目录中添加内容
Map<String,String> bookgroup = new HashMap<String,String>();
bookgroup.put("group", "书籍");
Map<String,String> productgroup = new HashMap<String,String>();
productgroup.put("group", "用具");
//将创建的一级目录放在一个集合中,供显示时使用
List<Map<String,String>> groups = new ArrayList<Map<String,String>>();
groups.add(bookgroup);
groups.add(productgroup);
//创建二级目录
ArrayList<HashMap<String,Object>> bookchild = new ArrayList<HashMap<String,Object>>();
ArrayList<HashMap<String,Object>> productchild = new ArrayList<HashMap<String,Object>>();
//用函数往二级目录中添加内容
bookchild = PutContentsIntoList(booknum,bookimgIds,bookmsgIds,bookcontents);
productchild = PutContentsIntoList(productnum,bookimgIds,bookmsgIds,bookcontents);
// 将二级条目放在一个集合里,供显示时使用
List<ArrayList<HashMap<String,Object>>> childs = new ArrayList<ArrayList<HashMap<String, Object>>>();
childs.add(bookchild);
childs.add(productchild);
//用适配器将二级目录链接到相对应的一级目录上
SimpleExpandableListAdapter adapter = new SimpleExpandableListAdapter(
this,
groups, R.layout.group, new String[]{"group"},new int[]{R.id.group},
childs, R.layout.user, new String[]{"imagelist","textview1","textview2"}, new int[]{R.id.imagelist,R.id.textview1,R.id.textview2});
setListAdapter(adapter);
backbutton = (Button)findViewById(R.id.button);
backbutton.setOnClickListener(new Button.OnClickListener(){
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
finish();
}
});
}//Override onCreate
@Override
public boolean onChildClick(ExpandableListView parent, View v,
int groupPosition, int childPosition, long id) {
// TODO Auto-generated method stub
Intent intent = new Intent();
intent.putExtra("positiongroup", groupPosition);
intent.putExtra("positionchild", childPosition);
//intent.setClass(ExpandableListViewDemoActivity.this, detail.class);
//this.startActivity(intent);
System.out.println("group-->"+groupPosition);
System.out.println("child-->"+childPosition);
return super.onChildClick(parent, v, groupPosition, childPosition, id);
}
//二级目录赋值图片和文字
private ArrayList<HashMap<String, Object>> PutContentsIntoList(int num,int[]imgIds,int[]msgIds,int[]contents) {
// TODO Auto-generated method stub
ArrayList<HashMap<String, Object>> templist = new ArrayList<HashMap<String, Object>>();
for (int i = 0;i<num;i++)
{ HashMap<String,Object> map = new HashMap<String,Object>();
map.put("imagelist",imgIds[i]);
map.put("textview1", getResources().getString(msgIds[i]));
map.put("textview2", getResources().getString(contents[i]));
templist.add(map);
}
return templist;
}
因为我是从已成功的listview的基础上改进为expandablelistview的,程序有点混乱啊……内容赋值之类的还木有对应起来,所以先无视productchild里面是用book的内容这个神bug先吧……谢谢各位大神了!!!
03-28 05:22:46.422: E/AndroidRuntime(315): FATAL EXCEPTION: main
03-28 05:22:46.422: E/AndroidRuntime(315): java.lang.ClassCastException: android.widget.ImageView
03-28 05:22:46.422: E/AndroidRuntime(315): at android.widget.SimpleExpandableListAdapter.bindView(SimpleExpandableListAdapter.java:247)
03-28 05:22:46.422: E/AndroidRuntime(315): at android.widget.SimpleExpandableListAdapter.getChildView(SimpleExpandableListAdapter.java:229)
03-28 05:22:46.422: E/AndroidRuntime(315): at android.widget.ExpandableListConnector.getView(ExpandableListConnector.java:450)
03-28 05:22:46.422: E/AndroidRuntime(315): at android.widget.AbsListView.obtainView(AbsListView.java:1315)
03-28 05:22:46.422: E/AndroidRuntime(315): at android.widget.ListView.makeAndAddView(ListView.java:1727)
03-28 05:22:46.422: E/AndroidRuntime(315): at android.widget.ListView.fillDown(ListView.java:652)
03-28 05:22:46.422: E/AndroidRuntime(315): at android.widget.ListView.fillSpecific(ListView.java:1284)
03-28 05:22:46.422: E/AndroidRuntime(315): at android.widget.ListView.layoutChildren(ListView.java:1558)
03-28 05:22:46.422: E/AndroidRuntime(315): at android.widget.AbsListView.onLayout(AbsListView.java:1147)
03-28 05:22:46.422: E/AndroidRuntime(315): at android.view.View.layout(View.java:7035)
03-28 05:22:46.422: E/AndroidRuntime(315): at android.widget.RelativeLayout.onLayout(RelativeLayout.java:909)
03-28 05:22:46.422: E/AndroidRuntime(315): at android.view.View.layout(View.java:7035)
03-28 05:22:46.422: E/AndroidRuntime(315): at android.widget.FrameLayout.onLayout(FrameLayout.java:333)
03-28 05:22:46.422: E/AndroidRuntime(315): at android.view.View.layout(View.java:7035)
03-28 05:22:46.422: E/AndroidRuntime(315): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1249)
03-28 05:22:46.422: E/AndroidRuntime(315): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1125)
03-28 05:22:46.422: E/AndroidRuntime(315): at android.widget.LinearLayout.onLayout(LinearLayout.java:1042)
03-28 05:22:46.422: E/AndroidRuntime(315): at android.view.View.layout(View.java:7035)
03-28 05:22:46.422: E/AndroidRuntime(315): at android.widget.FrameLayout.onLayout(FrameLayout.java:333)
03-28 05:22:46.422: E/AndroidRuntime(315): at android.view.View.layout(View.java:7035)
03-28 05:22:46.422: E/AndroidRuntime(315): at android.view.ViewRoot.performTraversals(ViewRoot.java:1045)
03-28 05:22:46.422: E/AndroidRuntime(315): at android.view.ViewRoot.handleMessage(ViewRoot.java:1727)
03-28 05:22:46.422: E/AndroidRuntime(315): at android.os.Handler.dispatchMessage(Handler.java:99)
03-28 05:22:46.422: E/AndroidRuntime(315): at android.os.Looper.loop(Looper.java:123)
03-28 05:22:46.422: E/AndroidRuntime(315): at android.app.ActivityThread.main(ActivityThread.java:4627)
03-28 05:22:46.422: E/AndroidRuntime(315): at java.lang.reflect.Method.invokeNative(Native Method)
03-28 05:22:46.422: E/AndroidRuntime(315): at java.lang.reflect.Method.invoke(Method.java:521)
03-28 05:22:46.422: E/AndroidRuntime(315): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
03-28 05:22:46.422: E/AndroidRuntime(315): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
03-28 05:22:46.422: E/AndroidRuntime(315): at dalvik.system.NativeStart.main(Native Method)
源程序:
package mars.ExpandableListViewDemo;
import java.util.*;
import android.app.ExpandableListActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.*;public class ExpandableListViewDemoActivity extends ExpandableListActivity {
/** Called when the activity is first created. */
private int[] bookimgIds=
{
R.drawable.pic1,R.drawable.pic2,
R.drawable.pic3,R.drawable.pic4,
R.drawable.pic5
};
private int[]bookmsgIds=
{
R.string.title1,R.string.title2,
R.string.title3,R.string.title4,
R.string.title5
};
private int[]bookcontents=
{
R.string.content1,R.string.content2,
R.string.content3,R.string.content4,
R.string.content5
};
private static final int booknum = 5; //所显示书本内容的数量
private static final int productnum = 3;//所显示用具内容的数量
private Button backbutton = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//创建一级目录,list<>内不是放二级目录的格式,而是放一级目录自身需显示的内容的格式
//往一级目录中添加内容
Map<String,String> bookgroup = new HashMap<String,String>();
bookgroup.put("group", "书籍");
Map<String,String> productgroup = new HashMap<String,String>();
productgroup.put("group", "用具");
//将创建的一级目录放在一个集合中,供显示时使用
List<Map<String,String>> groups = new ArrayList<Map<String,String>>();
groups.add(bookgroup);
groups.add(productgroup);
//创建二级目录
ArrayList<HashMap<String,Object>> bookchild = new ArrayList<HashMap<String,Object>>();
ArrayList<HashMap<String,Object>> productchild = new ArrayList<HashMap<String,Object>>();
//用函数往二级目录中添加内容
bookchild = PutContentsIntoList(booknum,bookimgIds,bookmsgIds,bookcontents);
productchild = PutContentsIntoList(productnum,bookimgIds,bookmsgIds,bookcontents);
// 将二级条目放在一个集合里,供显示时使用
List<ArrayList<HashMap<String,Object>>> childs = new ArrayList<ArrayList<HashMap<String, Object>>>();
childs.add(bookchild);
childs.add(productchild);
//用适配器将二级目录链接到相对应的一级目录上
SimpleExpandableListAdapter adapter = new SimpleExpandableListAdapter(
this,
groups, R.layout.group, new String[]{"group"},new int[]{R.id.group},
childs, R.layout.user, new String[]{"imagelist","textview1","textview2"}, new int[]{R.id.imagelist,R.id.textview1,R.id.textview2});
setListAdapter(adapter);
backbutton = (Button)findViewById(R.id.button);
backbutton.setOnClickListener(new Button.OnClickListener(){
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
finish();
}
});
}//Override onCreate
@Override
public boolean onChildClick(ExpandableListView parent, View v,
int groupPosition, int childPosition, long id) {
// TODO Auto-generated method stub
Intent intent = new Intent();
intent.putExtra("positiongroup", groupPosition);
intent.putExtra("positionchild", childPosition);
//intent.setClass(ExpandableListViewDemoActivity.this, detail.class);
//this.startActivity(intent);
System.out.println("group-->"+groupPosition);
System.out.println("child-->"+childPosition);
return super.onChildClick(parent, v, groupPosition, childPosition, id);
}
//二级目录赋值图片和文字
private ArrayList<HashMap<String, Object>> PutContentsIntoList(int num,int[]imgIds,int[]msgIds,int[]contents) {
// TODO Auto-generated method stub
ArrayList<HashMap<String, Object>> templist = new ArrayList<HashMap<String, Object>>();
for (int i = 0;i<num;i++)
{ HashMap<String,Object> map = new HashMap<String,Object>();
map.put("imagelist",imgIds[i]);
map.put("textview1", getResources().getString(msgIds[i]));
map.put("textview2", getResources().getString(contents[i]));
templist.add(map);
}
return templist;
}
因为我是从已成功的listview的基础上改进为expandablelistview的,程序有点混乱啊……内容赋值之类的还木有对应起来,所以先无视productchild里面是用book的内容这个神bug先吧……谢谢各位大神了!!!
我重写之后能运行了,但是根目录完全看不到字啊~~那一行太小了遮住了文字,我明明设置了textview的setpadding还是没有用……救命啊……