写了一段关于ExpandableListView的代码,但是调试时出了空指针异常(代码中已经把出现异常的地方标记出来了),但是就是没找出来为什么,请大神们帮忙,大神们顺便帮忙看看这个控件的使用是否还有其他问题,代码如下:
package duan.textfour;import java.util.ArrayList;
import java.util.HashMap;import android.app.Activity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseExpandableListAdapter;
import android.widget.ExpandableListView;
import android.widget.ImageView;
import android.widget.TextView;public class Four extends Activity {
private ArrayList<String> group=new ArrayList<String>();
private ArrayList<ArrayList<HashMap<String,Object>>> childs=new ArrayList<ArrayList<HashMap<String,Object>>>();
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
setGroup("论坛");
setChilds("论坛", "天涯论坛", R.drawable.icon);
setChilds("论坛", "猫扑论坛", R.drawable.icon);
ExpandableListView exlv= (ExpandableListView) findViewById(R.id.expandableListView1);
exlv.setAdapter(new MyAdapter());
}
public void setGroup(String grpStr){
group.add(grpStr);
}
public void setChilds(String grpStr,String name,Object log){
ArrayList<HashMap<String,Object>> child=new ArrayList<HashMap<String,Object>>();
HashMap<String,Object> map1=new HashMap<String,Object>();
HashMap<String,Object> map2=new HashMap<String,Object>();
HashMap<String,Object> map3=new HashMap<String,Object>();
map1.put("grpStr", grpStr);
map2.put("name", name);
map3.put("log", log);
child.add(map1);
child.add(map2);
child.add(map3);
childs.add(child);
}
class MyAdapter extends BaseExpandableListAdapter{
class ViewHolder {
TextView tv;
ImageView iv;
} class ViewHolder2{
TextView tv;
}
LayoutInflater chInflater=(LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
LayoutInflater grpInflater=(LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
@Override
public Object getChild(int groupPosition, int childPosition) {
// TODO Auto-generated method stub
return childs.get(groupPosition).get(childPosition);
} @Override
public long getChildId(int groupPosition, int childPosition) {
// TODO Auto-generated method stub
return childPosition;
} @Override
public View getChildView(int groupPosition, int childPosition,
boolean isLastChild, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
ViewHolder vh=new ViewHolder();
if(convertView==null){
convertView=chInflater.inflate(R.layout.child,null);
vh.iv=(ImageView) findViewById(R.id.childlog_imageView);
vh.tv=(TextView) findViewById(R.id.child_textView);
convertView.setTag(vh);
}
else{
vh=(ViewHolder) convertView.getTag();
}
vh.tv.setText((String)childs.get(groupPosition).get(childPosition).get("name"));
vh.iv.setBackgroundResource((Integer)childs.get(groupPosition).get(childPosition).get("log"));
return convertView;
} @Override
public int getChildrenCount(int groupPosition) {
// TODO Auto-generated method stub
return childs.get(groupPosition).size();
} @Override
public Object getGroup(int groupPosition) {
// TODO Auto-generated method stub
return group.get(groupPosition);
} @Override
public int getGroupCount() {
// TODO Auto-generated method stub
return group.size();
} @Override
public long getGroupId(int groupPosition) {
// TODO Auto-generated method stub
return groupPosition;
} @Override
public View getGroupView(int groupPosition, boolean isExpanded,
View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
ViewHolder2 vh=new ViewHolder2();
if(convertView==null){
convertView=grpInflater.inflate(R.layout.group, null);
vh.tv=(TextView) findViewById(R.id.group_textview);
convertView.setTag(vh);
}
else{
vh=(ViewHolder2) convertView.getTag();
}
//在下面这段代码中出现空指针异常
vh.tv.setText(group.get(groupPosition));
return convertView;
} @Override
public boolean hasStableIds() {
// TODO Auto-generated method stub
return false;
} @Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
// TODO Auto-generated method stub
return false;
}
}
}
package duan.textfour;import java.util.ArrayList;
import java.util.HashMap;import android.app.Activity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseExpandableListAdapter;
import android.widget.ExpandableListView;
import android.widget.ImageView;
import android.widget.TextView;public class Four extends Activity {
private ArrayList<String> group=new ArrayList<String>();
private ArrayList<ArrayList<HashMap<String,Object>>> childs=new ArrayList<ArrayList<HashMap<String,Object>>>();
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
setGroup("论坛");
setChilds("论坛", "天涯论坛", R.drawable.icon);
setChilds("论坛", "猫扑论坛", R.drawable.icon);
ExpandableListView exlv= (ExpandableListView) findViewById(R.id.expandableListView1);
exlv.setAdapter(new MyAdapter());
}
public void setGroup(String grpStr){
group.add(grpStr);
}
public void setChilds(String grpStr,String name,Object log){
ArrayList<HashMap<String,Object>> child=new ArrayList<HashMap<String,Object>>();
HashMap<String,Object> map1=new HashMap<String,Object>();
HashMap<String,Object> map2=new HashMap<String,Object>();
HashMap<String,Object> map3=new HashMap<String,Object>();
map1.put("grpStr", grpStr);
map2.put("name", name);
map3.put("log", log);
child.add(map1);
child.add(map2);
child.add(map3);
childs.add(child);
}
class MyAdapter extends BaseExpandableListAdapter{
class ViewHolder {
TextView tv;
ImageView iv;
} class ViewHolder2{
TextView tv;
}
LayoutInflater chInflater=(LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
LayoutInflater grpInflater=(LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
@Override
public Object getChild(int groupPosition, int childPosition) {
// TODO Auto-generated method stub
return childs.get(groupPosition).get(childPosition);
} @Override
public long getChildId(int groupPosition, int childPosition) {
// TODO Auto-generated method stub
return childPosition;
} @Override
public View getChildView(int groupPosition, int childPosition,
boolean isLastChild, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
ViewHolder vh=new ViewHolder();
if(convertView==null){
convertView=chInflater.inflate(R.layout.child,null);
vh.iv=(ImageView) findViewById(R.id.childlog_imageView);
vh.tv=(TextView) findViewById(R.id.child_textView);
convertView.setTag(vh);
}
else{
vh=(ViewHolder) convertView.getTag();
}
vh.tv.setText((String)childs.get(groupPosition).get(childPosition).get("name"));
vh.iv.setBackgroundResource((Integer)childs.get(groupPosition).get(childPosition).get("log"));
return convertView;
} @Override
public int getChildrenCount(int groupPosition) {
// TODO Auto-generated method stub
return childs.get(groupPosition).size();
} @Override
public Object getGroup(int groupPosition) {
// TODO Auto-generated method stub
return group.get(groupPosition);
} @Override
public int getGroupCount() {
// TODO Auto-generated method stub
return group.size();
} @Override
public long getGroupId(int groupPosition) {
// TODO Auto-generated method stub
return groupPosition;
} @Override
public View getGroupView(int groupPosition, boolean isExpanded,
View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
ViewHolder2 vh=new ViewHolder2();
if(convertView==null){
convertView=grpInflater.inflate(R.layout.group, null);
vh.tv=(TextView) findViewById(R.id.group_textview);
convertView.setTag(vh);
}
else{
vh=(ViewHolder2) convertView.getTag();
}
//在下面这段代码中出现空指针异常
vh.tv.setText(group.get(groupPosition));
return convertView;
} @Override
public boolean hasStableIds() {
// TODO Auto-generated method stub
return false;
} @Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
// TODO Auto-generated method stub
return false;
}
}
}
ArrayList<ArrayList<HashMap<String,String>>>类似这样的。
@Override
public View getGroupView(int groupPosition, boolean isExpanded,
View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
ViewHolder2 vh=null;
if(convertView==null){
convertView=grpInflater.inflate(R.layout.group, null);
vh=new ViewHolder2();
convertView.setTag(vh);
}else{
vh=(ViewHolder2) convertView.getTag();
} vh.tv=(TextView) findViewById(R.id.group_textview);
vh.tv.setText(group.get(groupPosition));
return convertView;
}
vh.tv=(TextView) convertView.findViewById(R.id.group_textview);
import java.util.HashMap;import android.app.Activity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseExpandableListAdapter;
import android.widget.ExpandableListView;
import android.widget.ImageView;
import android.widget.TextView;public class Four extends Activity {
private ArrayList<String> group = new ArrayList<String>();
private ArrayList<ArrayList<HashMap<String, Object>>> childs = new ArrayList<ArrayList<HashMap<String, Object>>>(); /** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
setGroup("论坛");
setChilds("论坛", "天涯论坛");
setChilds("论坛", "猫扑论坛");
ExpandableListView exlv = (ExpandableListView) findViewById(R.id.expandableListView1);
exlv.setAdapter(new MyAdapter());
} public void setGroup(String grpStr) {
group.add(grpStr);
} public void setChilds(String grpStr, String name) {
ArrayList<HashMap<String, Object>> child = new ArrayList<HashMap<String, Object>>();
HashMap<String, Object> map1 = new HashMap<String, Object>();
HashMap<String, Object> map2 = new HashMap<String, Object>();
map1.put("grpStr", grpStr);
map2.put("name", name);
child.add(map1);
child.add(map2);
childs.add(child);
} class MyAdapter extends BaseExpandableListAdapter { class ViewHolder {
TextView tv;
ImageView iv;
} class ViewHolder2 {
TextView tv;
} LayoutInflater chInflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
LayoutInflater grpInflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE); @Override
public Object getChild(int groupPosition, int childPosition) {
// TODO Auto-generated method stub
return childs.get(childPosition);
} @Override
public long getChildId(int groupPosition, int childPosition) {
// TODO Auto-generated method stub
return childPosition;
} @Override
public View getChildView(int groupPosition, int childPosition,
boolean isLastChild, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
ViewHolder vh;
if (convertView == null) {
convertView = chInflater.inflate(R.layout.child, null);
vh = new ViewHolder();
vh.iv = (ImageView) convertView.findViewById(R.id.childlog_imageView);
vh.tv = (TextView) convertView.findViewById(R.id.child_textView);
convertView.setTag(vh);
} else {
vh = (ViewHolder) convertView.getTag();
}
if(childPosition==0){
vh.tv.setText("天涯论坛");
vh.iv.setImageResource(R.drawable.icon);
}
if(childPosition==1){
vh.tv.setText("猫扑论坛");
vh.iv.setImageResource(R.drawable.icon);
}
return convertView;
} @Override
public int getChildrenCount(int groupPosition) {
// TODO Auto-generated method stub
return childs.get(groupPosition).size();
} @Override
public Object getGroup(int groupPosition) {
// TODO Auto-generated method stub
return group.get(groupPosition);
} @Override
public int getGroupCount() {
// TODO Auto-generated method stub
return group.size();
} @Override
public long getGroupId(int groupPosition) {
// TODO Auto-generated method stub
return groupPosition;
} @Override
public View getGroupView(int groupPosition, boolean isExpanded,
View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
ViewHolder2 vh = new ViewHolder2();
if (convertView == null) {
convertView = grpInflater.inflate(R.layout.group, null);
vh.tv = (TextView) convertView.findViewById(R.id.group_textview);
convertView.setTag(vh);
} else {
vh = (ViewHolder2) convertView.getTag();
}
// 在下面这段代码中出现空指针异常
vh.tv.setText(group.get(groupPosition));
return convertView;
} @Override
public boolean hasStableIds() {
// TODO Auto-generated method stub
return false;
} @Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
// TODO Auto-generated method stub
return false;
}
}
}这是帮你改过的代码,我试了,可以运行,你不妨试试。
出现问题还有个原因,就是你设置setChild方法的时候,出现了错误,你实际上并没有把“猫扑论坛”这一项设定进去,我的建议是你可以在getChildView方法中去设定,这样简便一些,没有你那么复杂且容易出错。
setChilds哪个地方有问题?
只修改setChild该怎么修改?