我有一个项目,它使用带有自定义适配器的可扩展列表视图。 我的列表视图当前工作,但是 问题出现在这两个问题开始的时候: 1-错误的孩子onclick开始。我点击的孩子不会工作而是另一个 2-点击后,应用程序崩溃了。
这是我的适配器:
@SuppressWarnings("unchecked")
公共类NewAdapter扩展了BaseExpandableListAdapter {
public ArrayList<String> groupItem, tempChild;
public ArrayList<Object> Childtem = new ArrayList<Object>();
public LayoutInflater minflater;
public Activity activity;
public NewAdapter(ArrayList<String> grList, ArrayList<Object> childItem) {
groupItem = grList;
this.Childtem = childItem;
}
public void setInflater(LayoutInflater mInflater, Activity act) {
this.minflater = mInflater;
activity = act;
}
public Object getChild(int groupPosition, int childPosition) {
return null;
}
public long getChildId(int groupPosition, int childPosition) {
return 0;
}
public View getChildView(int groupPosition, final int childPosition,
boolean isLastChild, View convertView, ViewGroup parent) {
tempChild = (ArrayList<String>) Childtem.get(groupPosition);
TextView text = null;
if (convertView == null) {
convertView = minflater.inflate(R.layout.childrow, null);
}
text = (TextView) convertView.findViewById(R.id.textView1);
text.setText(tempChild.get(childPosition));
//typeface
text.setTypeface(G.typeFacePrs);
//************
convertView.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Log.i("LOG", "childposition"+tempChild.get(childPosition));
//customized toast by Mahdi Tajik
Toast toast = Toast.makeText(activity, tempChild.get(childPosition),Toast.LENGTH_LONG);
Log.i("LOG", "tempChild.get(childPosition)"+tempChild.get(childPosition));
View view = toast.getView();
view.setBackgroundColor(Color.parseColor("#e60017"));
toast.setGravity(Gravity.BOTTOM, 0, 78);
TextView text = (TextView) view.findViewById(android.R.id.message);
//text.setText("balabalalalalalal");
//here you can do anything with text
//toast.setView(text);
toast.show();
loadContent(tempChild.get(childPosition));
/*custom toast by: mahdi tajik
*
Toast toast = new Toast(context);
toast.setDuration(Toast.LENGTH_LONG);
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view = inflater.inflate(R.layout.custom_layout, null);
toast.setView(view);
toast.show();
*
*/
}
private void loadContent(String key) {
Class distination_act = ContentActivity.class;
Activity myAct = G.currentActivity;
String mDrawableName = "";
if(key=="تغییر در عادات روده ای و مثانه"){
G.must_load_content = G.currentActivity.getString(R.string.content_text_1001);
mDrawableName = "text_1001";
}
if(key=="پشت درد مداوم، تغییر رنگ ادرار و مدفوع"){
G.must_load_content = G.currentActivity.getString(R.string.content_text_1002);
mDrawableName = "text_1002";
}
if(key=="افسردگی"){
G.must_load_content = G.currentActivity.getString(R.string.content_text_1003);
mDrawableName = "text_1003";
}
if(key=="عفونت کلامیدیائی"){
G.must_load_content = G.currentActivity.getString(R.string.content_text_2001);
mDrawableName = "text_2001";
}
if(key=="سوزاک"){
G.must_load_content = G.currentActivity.getString(R.string.content_text_2002);
mDrawableName = "text_2002";
}
if(key=="سیفیلیس"){
G.must_load_content = G.currentActivity.getString(R.string.content_text_2003);
mDrawableName = "text_2003";
}
if(key=="تبخال تناسلی"){
G.must_load_content = G.currentActivity.getString(R.string.content_text_2004);
mDrawableName = "text_2004";
}
if(key=="زگیل تناسلی"){
G.must_load_content = G.currentActivity.getString(R.string.content_text_2005);
mDrawableName = "text_2005";
}
if(key=="ایدز"){
G.must_load_content = G.currentActivity.getString(R.string.content_text_2006);
mDrawableName = "text_2006";
}
if(key=="التهاب پروستات"){
G.must_load_content = G.currentActivity.getString(R.string.content_text_3001);
mDrawableName = "text_3001";
}
if(key=="بزرگی خوش خیم پروستات"){
G.must_load_content = G.currentActivity.getString(R.string.content_text_3002);
mDrawableName = "text_3002";
}
if(key=="سرطان پروستات"){
G.must_load_content = G.currentActivity.getString(R.string.content_text_3003);
mDrawableName = "text_3003";
}
if(key=="افزایش فشار خون"){
G.must_load_content = G.currentActivity.getString(R.string.content_text_4001);
mDrawableName = "text_4001";
}
if(key=="بیماری عروق کرونری قلب"){
G.must_load_content = G.currentActivity.getString(R.string.content_text_4002);
mDrawableName = "text_4002";
}
if(key=="سکته قلبی"){
G.must_load_content = G.currentActivity.getString(R.string.content_text_4003);
mDrawableName = "text_4003";
}
if(key=="دیابت"){
G.must_load_content = G.currentActivity.getString(R.string.content_text_5001);
mDrawableName = "text_5001";
}
if(key=="سرطان بیضه"){
G.must_load_content = G.currentActivity.getString(R.string.content_text_6001);
mDrawableName = "text_6001";
}
if(key=="زندگی سالم"){
G.must_load_content = G.currentActivity.getString(R.string.content_text_7001);
mDrawableName = "text_7001";
}
if(key=="یک رژیم غذائی سالم به چه چیزی شبیه است؟"){
G.must_load_content = G.currentActivity.getString(R.string.content_text_8001);
mDrawableName = "text_8001";
}
if(key=="رژیم غذائی و کاهش وزن"){
G.must_load_content = G.currentActivity.getString(R.string.content_text_8002);
mDrawableName = "text_8002";
}
if(key=="ورزش"){
G.must_load_content = G.currentActivity.getString(R.string.content_text_9001);
mDrawableName = "text_9001";
}
if(key=="ورزش موثر"){
//G.must_load_content = G.currentActivity.getString(R.string.content_text_9002);
distination_act = EfectiveSportActivity.class;
mDrawableName = "text_9002";
}
Resources res = G.currentActivity.getResources();
Log.i("LOG", "pont1 ");
int resID = res.getIdentifier(mDrawableName , "drawable", G.currentActivity.getPackageName());
Log.i("LOG", "pont2");
G.must_load_image_of_content = res.getDrawable(resID );
Log.i("LOG", "pont3");
Intent i = new Intent(G.currentActivity,distination_act);
Log.i("LOG", "pont4");
myAct.startActivity(i);
}
});
return convertView;
}
public int getChildrenCount(int groupPosition) {
return ((ArrayList<String>) Childtem.get(groupPosition)).size();
}
public Object getGroup(int groupPosition) {
return null;
}
public int getGroupCount() {
return groupItem.size();
}
@Override
public void onGroupCollapsed(int groupPosition) {
super.onGroupCollapsed(groupPosition);
}
@Override
public void onGroupExpanded(int groupPosition) {
super.onGroupExpanded(groupPosition);
}
public long getGroupId(int groupPosition) {
return 0;
}
public View getGroupView(int groupPosition, boolean isExpanded,
View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = minflater.inflate(R.layout.grouprow, null);
}
((CheckedTextView) convertView).setText(groupItem.get(groupPosition));
((CheckedTextView) convertView).setChecked(isExpanded);
return convertView;
}
public boolean hasStableIds() {
return false;
}
public boolean isChildSelectable(int groupPosition, int childPosition) {
return false;
}
}
在这里输入代码
这是活动
public class HealthActivity extends ExpandableListActivity implements
OnChildClickListener {
ExpandableListView expandbleLis=null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
expandbleLis = getExpandableListView();
G.currentActivity = HealthActivity.this;
expandbleLis.setDividerHeight(3);
expandbleLis.setGroupIndicator(null);
expandbleLis.setClickable(true);
setGroupData();
setChildGroupData();
NewAdapter mNewAdapter = new NewAdapter(groupItem, childItem);
mNewAdapter
.setInflater((LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE),this);
getExpandableListView().setAdapter(mNewAdapter);
expandbleLis.setOnChildClickListener(this);
}
public void setGroupData() {
groupItem.add("علائم هشدار دهنده");
groupItem.add("بیماری های جنسی");
groupItem.add("سلامت پروستات");
groupItem.add("سیستم قلبی عروقی");
groupItem.add("دیابت");
groupItem.add("سرطانها");
groupItem.add("اقدامات برای بهبود کیفیت زندگی");
groupItem.add("تغذیه");
groupItem.add("ورزش و توانائی جسمی");
}
ArrayList<String> groupItem = new ArrayList<String>();
ArrayList<Object> childItem = new ArrayList<Object>();
public void setChildGroupData() {
/**
* Add Data For TecthNology
*/
ArrayList<String> child = new ArrayList<String>();
child.add("تغییر در عادات روده ای و مثانه"); //string 1001
child.add("پشت درد مداوم، تغییر رنگ ادرار و مدفوع"); //string 1002
child.add("افسردگی"); //string 1003
childItem.add(child);
/**
* Add Data For Mobile
*/
child = new ArrayList<String>();
child.add("عفونت کلامیدیائی"); //string 2001
child.add("سوزاک"); //string 2002
child.add("سیفیلیس"); //string 2003
child.add("تبخال تناسلی"); //string 2004
child.add("زگیل تناسلی"); //string 2005
child.add("ایدز"); //string 2006
childItem.add(child);
/**
* Add Data For Manufacture
*/
child = new ArrayList<String>();
child.add("التهاب پروستات"); //string 3001
child.add("بزرگی خوش خیم پروستات"); //string 3002
child.add("سرطان پروستات"); //string 3003
childItem.add(child);
/**
* Add Data For Extras
*/
child = new ArrayList<String>();
child.add("افزایش فشار خون"); //string 4001
child.add("بیماری عروق کرونری قلب"); //string 4002
child.add("سکته قلبی"); //string 4003
childItem.add(child);
child = new ArrayList<String>();
child.add("دیابت"); //string 5001
childItem.add(child);
child = new ArrayList<String>();
child.add("سرطان بیضه"); //string 6001
childItem.add(child);
child = new ArrayList<String>();
child.add("زندگی سالم"); //string 7001
childItem.add(child);
child = new ArrayList<String>();
child.add("یک رژیم غذائی سالم به چه چیزی شبیه است؟"); //string 8001
child.add("رژیم غذائی و کاهش وزن"); //string 8002
childItem.add(child);
child = new ArrayList<String>();
child.add("ورزش"); //string 9001
child.add("ورزش موثر"); //string 9002
childItem.add(child);
}
@Override
public boolean onChildClick(ExpandableListView parent, View v,
int groupPosition, int childPosition, long id) {
Toast.makeText(HealthActivity.this, "Clicked On Child",
Toast.LENGTH_SHORT).show();
//parent.expandGroup(-1);
//parent.collapseGroup(groupPosition);
expandbleLis.collapseGroup(groupPosition);
return true;
}
}
编辑的代码是:
import java.security.acl.Group;
import java.util.ArrayList;
import android.R.color;
import android.app.Activity;
import android.content.Intent;
import android.content.res.Resources;
import android.graphics.Color;
import android.graphics.drawable.Drawable;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.BaseExpandableListAdapter;
import android.widget.CheckedTextView;
import android.widget.TextView;
import android.widget.Toast;
@SuppressWarnings("unchecked")
public class NewAdapter extends BaseExpandableListAdapter {
public int previousGroup=-1;
public ArrayList<String> groupItem, tempChild;
public ArrayList<Object> Childtem = new ArrayList<Object>();
public LayoutInflater minflater;
public Activity activity=null;
public NewAdapter(ArrayList<String> grList, ArrayList<Object> childItem) {
groupItem = grList;
this.Childtem = childItem;
}
public void setInflater(LayoutInflater mInflater, Activity act) {
this.minflater = mInflater;
activity = act;
}
public Object getChild(int groupPosition, int childPosition) {
return null;
}
public long getChildId(int groupPosition, int childPosition) {
return 0;
}
public View getChildView(int groupPosition, final int childPosition,
boolean isLastChild, View convertView, ViewGroup parent) {
convertView.setTag(groupPosition*100 + childPosition);
final int myGroupPos = groupPosition;
final DisplayMetrics dm = new DisplayMetrics();
activity.getWindowManager().getDefaultDisplay().getMetrics(dm);
previousGroup = myGroupPos;
tempChild = (ArrayList<String>) Childtem.get(groupPosition);
TextView text = null;
if (convertView == null) {
convertView = minflater.inflate(R.layout.childrow, null);
}
/*
text = (TextView) convertView.findViewById(R.id.textView1);
text.setText(tempChild.get(childPosition));
//typeface
text.setTypeface(G.typeFacePrs);
*/
//************
convertView.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Log.i("LOG", "childposition"+tempChild.get(childPosition));
ReportActivity.mahdiCustomToast(tempChild.get(childPosition), 1);
loadContent(tempChild.get(childPosition));
previousGroup = myGroupPos;
}
private void loadContent(String key) {
}
});
return convertView;
}
public int getChildrenCount(int groupPosition) {
return ((ArrayList<String>) Childtem.get(groupPosition)).size();
}
public Object getGroup(int groupPosition) {
return null;
}
public int getGroupCount() {
return groupItem.size();
}
@Override
public void onGroupCollapsed(int groupPosition) {
super.onGroupCollapsed(groupPosition);
}
@Override
public void onGroupExpanded(int groupPosition) {
super.onGroupExpanded(groupPosition);
}
public long getGroupId(int groupPosition) {
return 0;
}
public View getGroupView(int groupPosition, boolean isExpanded,
View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = minflater.inflate(R.layout.grouprow, null);
}
((CheckedTextView) convertView).setText(groupItem.get(groupPosition));
((CheckedTextView) convertView).setChecked(isExpanded);
return convertView;
}
public boolean hasStableIds() {
return false;
}
public boolean isChildSelectable(int groupPosition, int childPosition) {
return false;
}
}
log cat is:
12-21 10:37:42.628: D/libEGL(5084): loaded /system/lib/egl/libGLESv2_adreno200.so
12-21 10:37:42.628: I/Adreno200-EGL(5084): <qeglDrvAPI_eglInitialize:265>: EGL 1.4 QUALCOMM build: HAREESHG_Nondeterministic_AU+PATCH[ES]_msm8960_JB_1.9.6_MR2_CL3219408_release_ENGG (CL3219408)
12-21 10:37:42.628: I/Adreno200-EGL(5084): Build Date: 09/28/13 Sat
12-21 10:37:42.628: I/Adreno200-EGL(5084): Local Branch: hhh
12-21 10:37:42.628: I/Adreno200-EGL(5084): Remote Branch: quic/jb_1.9.6_1
12-21 10:37:42.628: I/Adreno200-EGL(5084): Local Patches: 8d50ec23e42ef52b570aa6ff1650afac0b503d78 CL3219408: Fix in the Glreadpixels for negative offsets and larger dimensions.
12-21 10:37:42.628: I/Adreno200-EGL(5084): 801859126f6ca69482b39a34ca61447e3f7cded8 rb: fix panel settings to clear undrawn/undefined buffers
12-21 10:37:42.628: I/Adreno200-EGL(5084): Reconstruct Branch: LOCAL_PATCH[ES]
12-21 10:37:42.718: D/OpenGLRenderer(5084): Enabling debug mode 0
12-21 10:37:42.728: D/OpenGLRenderer(5084): GL error from OpenGLRenderer: 0x502
12-21 10:37:42.728: E/OpenGLRenderer(5084): GL_INVALID_OPERATION
12-21 10:37:46.482: D/skia(5084): new locale
12-21 10:38:01.989: D/skia(5731): new locale
12-21 10:38:02.069: D/libEGL(5731): loaded /system/lib/egl/libEGL_adreno200.so
12-21 10:38:02.069: D/libEGL(5731): loaded /system/lib/egl/libGLESv1_CM_adreno200.so
12-21 10:38:02.099: D/libEGL(5731): loaded /system/lib/egl/libGLESv2_adreno200.so
12-21 10:38:02.109: I/Adreno200-EGL(5731): <qeglDrvAPI_eglInitialize:265>: EGL 1.4 QUALCOMM build: HAREESHG_Nondeterministic_AU+PATCH[ES]_msm8960_JB_1.9.6_MR2_CL3219408_release_ENGG (CL3219408)
12-21 10:38:02.109: I/Adreno200-EGL(5731): Build Date: 09/28/13 Sat
12-21 10:38:02.109: I/Adreno200-EGL(5731): Local Branch: hhh
12-21 10:38:02.109: I/Adreno200-EGL(5731): Remote Branch: quic/jb_1.9.6_1
12-21 10:38:02.109: I/Adreno200-EGL(5731): Local Patches: 8d50ec23e42ef52b570aa6ff1650afac0b503d78 CL3219408: Fix in the Glreadpixels for negative offsets and larger dimensions.
12-21 10:38:02.109: I/Adreno200-EGL(5731): 801859126f6ca69482b39a34ca61447e3f7cded8 rb: fix panel settings to clear undrawn/undefined buffers
12-21 10:38:02.109: I/Adreno200-EGL(5731): Reconstruct Branch: LOCAL_PATCH[ES]
12-21 10:38:02.269: D/OpenGLRenderer(5731): Enabling debug mode 0
12-21 10:38:06.554: D/AbsListView(5731): Get MotionRecognitionManager
12-21 10:38:06.754: D/AbsListView(5731): unregisterIRListener() is called
12-21 10:38:06.934: D/AbsListView(5731): unregisterIRListener() is called
12-21 10:38:07.024: D/AbsListView(5731): unregisterIRListener() is called
12-21 10:38:08.145: D/AndroidRuntime(5731): Shutting down VM
12-21 10:38:08.155: W/dalvikvm(5731): threadid=1: thread exiting with uncaught exception (group=0x418dc898)
12-21 10:38:08.175: E/AndroidRuntime(5731): FATAL EXCEPTION: main
12-21 10:38:08.175: E/AndroidRuntime(5731): java.lang.NullPointerException
12-21 10:38:08.175: E/AndroidRuntime(5731): at com.tebsoft.his.NewAdapter.getChildView(NewAdapter.java:63)
12-21 10:38:08.175: E/AndroidRuntime(5731): at android.widget.ExpandableListConnector.getView(ExpandableListConnector.java:455)
12-21 10:38:08.175: E/AndroidRuntime(5731): at android.widget.AbsListView.obtainView(AbsListView.java:2624)
12-21 10:38:08.175: E/AndroidRuntime(5731): at android.widget.ListView.makeAndAddView(ListView.java:1852)
12-21 10:38:08.175: E/AndroidRuntime(5731): at android.widget.ListView.fillDown(ListView.java:682)
12-21 10:38:08.175: E/AndroidRuntime(5731): at android.widget.ListView.fillSpecific(ListView.java:1345)
12-21 10:38:08.175: E/AndroidRuntime(5731): at android.widget.ListView.layoutChildren(ListView.java:1645)
12-21 10:38:08.175: E/AndroidRuntime(5731): at android.widget.AbsListView.onLayout(AbsListView.java:2444)
12-21 10:38:08.175: E/AndroidRuntime(5731): at android.view.View.layout(View.java:15221)
12-21 10:38:08.175: E/AndroidRuntime(5731): at android.view.ViewGroup.layout(ViewGroup.java:4793)
12-21 10:38:08.175: E/AndroidRuntime(5731): at android.widget.FrameLayout.onLayout(FrameLayout.java:448)
12-21 10:38:08.175: E/AndroidRuntime(5731): at android.view.View.layout(View.java:15221)
12-21 10:38:08.175: E/AndroidRuntime(5731): at android.view.ViewGroup.layout(ViewGroup.java:4793)
12-21 10:38:08.175: E/AndroidRuntime(5731): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1677)
12-21 10:38:08.175: E/AndroidRuntime(5731): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1531)
12-21 10:38:08.175: E/AndroidRuntime(5731): at android.widget.LinearLayout.onLayout(LinearLayout.java:1440)
12-21 10:38:08.175: E/AndroidRuntime(5731): at android.view.View.layout(View.java:15221)
12-21 10:38:08.175: E/AndroidRuntime(5731): at android.view.ViewGroup.layout(ViewGroup.java:4793)
12-21 10:38:08.175: E/AndroidRuntime(5731): at android.widget.FrameLayout.onLayout(FrameLayout.java:448)
12-21 10:38:08.175: E/AndroidRuntime(5731): at android.view.View.layout(View.java:15221)
12-21 10:38:08.175: E/AndroidRuntime(5731): at android.view.ViewGroup.layout(ViewGroup.java:4793)
12-21 10:38:08.175: E/AndroidRuntime(5731): at android.widget.FrameLayout.onLayout(FrameLayout.java:448)
12-21 10:38:08.175: E/AndroidRuntime(5731): at android.view.View.layout(View.java:15221)
12-21 10:38:08.175: E/AndroidRuntime(5731): at android.view.ViewGroup.layout(ViewGroup.java:4793)
12-21 10:38:08.175: E/AndroidRuntime(5731): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1677)
12-21 10:38:08.175: E/AndroidRuntime(5731): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1531)
12-21 10:38:08.175: E/AndroidRuntime(5731): at android.widget.LinearLayout.onLayout(LinearLayout.java:1440)
12-21 10:38:08.175: E/AndroidRuntime(5731): at android.view.View.layout(View.java:15221)
12-21 10:38:08.175: E/AndroidRuntime(5731): at android.view.ViewGroup.layout(ViewGroup.java:4793)
12-21 10:38:08.175: E/AndroidRuntime(5731): at android.widget.FrameLayout.onLayout(FrameLayout.java:448)
12-21 10:38:08.175: E/AndroidRuntime(5731): at android.view.View.layout(View.java:15221)
12-21 10:38:08.175: E/AndroidRuntime(5731): at android.view.ViewGroup.layout(ViewGroup.java:4793)
12-21 10:38:08.175: E/AndroidRuntime(5731): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1677)
12-21 10:38:08.175: E/AndroidRuntime(5731): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1531)
12-21 10:38:08.175: E/AndroidRuntime(5731): at android.widget.LinearLayout.onLayout(LinearLayout.java:1440)
12-21 10:38:08.175: E/AndroidRuntime(5731): at android.view.View.layout(View.java:15221)
12-21 10:38:08.175: E/AndroidRuntime(5731): at android.view.ViewGroup.layout(ViewGroup.java:4793)
12-21 10:38:08.175: E/AndroidRuntime(5731): at android.widget.FrameLayout.onLayout(FrameLayout.java:448)
12-21 10:38:08.175: E/AndroidRuntime(5731): at android.view.View.layout(View.java:15221)
12-21 10:38:08.175: E/AndroidRuntime(5731): at android.view.ViewGroup.layout(ViewGroup.java:4793)
12-21 10:38:08.175: E/AndroidRuntime(5731): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1677)
12-21 10:38:08.175: E/AndroidRuntime(5731): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1531)
12-21 10:38:08.175: E/AndroidRuntime(5731): at android.widget.LinearLayout.onLayout(LinearLayout.java:1440)
12-21 10:38:08.175: E/AndroidRuntime(5731): at android.view.View.layout(View.java:15221)
12-21 10:38:08.175: E/AndroidRuntime(5731): at android.view.ViewGroup.layout(ViewGroup.java:4793)
12-21 10:38:08.175: E/AndroidRuntime(5731): at android.widget.FrameLayout.onLayout(FrameLayout.java:448)
12-21 10:38:08.175: E/AndroidRuntime(5731): at android.view.View.layout(View.java:15221)
12-21 10:38:08.175: E/AndroidRuntime(5731): at android.view.ViewGroup.layout(ViewGroup.java:4793)
12-21 10:38:08.175: E/AndroidRuntime(5731): at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2260)
12-21 10:38:08.175: E/AndroidRuntime(5731): at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2007)
12-21 10:38:08.175: E/AndroidRuntime(5731): at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1249)
12-21 10:38:08.175: E/AndroidRuntime(5731): at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6364)
12-21 10:38:08.175: E/AndroidRuntime(5731): at android.view.Choreographer$CallbackRecord.run(Choreographer.java:791)
12-21 10:38:08.175: E/AndroidRuntime(5731): at android.view.Choreographer.doCallbacks(Choreographer.java:591)
12-21 10:38:08.175: E/AndroidRuntime(5731): at android.view.Choreographer.doFrame(Choreographer.java:561)
12-21 10:38:08.175: E/AndroidRuntime(5731): at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:777)
12-21 10:38:08.175: E/AndroidRuntime(5731): at android.os.Handler.handleCallback(Handler.java:730)
12-21 10:38:08.175: E/AndroidRuntime(5731): at android.os.Handler.dispatchMessage(Handler.java:92)
12-21 10:38:08.175: E/AndroidRuntime(5731): at android.os.Looper.loop(Looper.java:137)
12-21 10:38:08.175: E/AndroidRuntime(5731): at android.app.ActivityThread.main(ActivityThread.java:5455)
12-21 10:38:08.175: E/AndroidRuntime(5731): at java.lang.reflect.Method.invokeNative(Native Method)
12-21 10:38:08.175: E/AndroidRuntime(5731): at java.lang.reflect.Method.invoke(Method.java:525)
12-21 10:38:08.175: E/AndroidRuntime(5731): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1187)
12-21 10:38:08.175: E/AndroidRuntime(5731): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)
12-21 10:38:08.175: E/AndroidRuntime(5731): at dalvik.system.NativeStart.main(Native Method)
答案 0 :(得分:0)
我可以对你说的第一件事是,你必须在每个视图中使用标签,以便轻松使用你的视图,然后你不需要检查密钥,如下面的代码:
convertView.setTag(groupPosition*100 + childPosition);
使用此代码,每个子项都有一个唯一标记,然后在onClick方法中,您可以获得v.getTag()
标记。这将为您提供独特的标签,您可以轻松获得孩子的位置。
我在你的代码中看到的第二件事是不正确的是当你想要检查你的String时使用==
。你必须在字符串检查中使用.equal()
。
// 修改
您必须将seTag()
放入getChildView()。
让您的孩子使用以下代码:
int chiledposClicked = v.getTag() % 100;
int groupPosClicked = v.getTag() / 100;
那么你可以用你的孩子
Childtem.get(groupPosClicked).get(chiledposClicked);
<强>结果强>
public View getChildView(int groupPosition, final int childPosition,
boolean isLastChild, View convertView, ViewGroup parent) {
final int myGroupPos = groupPosition;
final DisplayMetrics dm = new DisplayMetrics();
activity.getWindowManager().getDefaultDisplay().getMetrics(dm);
previousGroup = myGroupPos;
tempChild = (ArrayList<String>) Childtem.get(groupPosition);
TextView text = null;
if (convertView == null) {
convertView = minflater.inflate(R.layout.childrow, null);
}
convertView.setTag(groupPosition*100 + childPosition);
/*
text = (TextView) convertView.findViewById(R.id.textView1);
text.setText(tempChild.get(childPosition));
//typeface
text.setTypeface(G.typeFacePrs);
*/
//************
convertView.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
int chiledposClicked = v.getTag() % 100;
int groupPosClicked = v.getTag() / 100;
log.d("Group pos and child pos",""+groupPosClicked +" "+ chiledposClicked);
Childtem.get(groupPosClicked).get(chiledposClicked);
log.d("chiled is",Childtem.get(groupPosClicked).get(chiledposClicked));
ReportActivity.mahdiCustomToast(Childtem.get(groupPosClicked).get(chiledposClicked)
, 1);
loadContent(Childtem.get(groupPosClicked).get(chiledposClicked));
}
private void loadContent(String key) {
}
});
return convertView;
}
答案 1 :(得分:0)
您的转换视图在以下行中为空:
convertView.setTag(groupPosition*100 + childPosition);
在检查null之后尝试执行此操作:
final int myGroupPos = groupPosition;
final DisplayMetrics dm = new DisplayMetrics();
activity.getWindowManager().getDefaultDisplay().getMetrics(dm);
previousGroup = myGroupPos;
tempChild = (ArrayList<String>) Childtem.get(groupPosition);
TextView text = null;
if (convertView == null) {
convertView = minflater.inflate(R.layout.childrow, null);
}
convertView.setTag(groupPosition*100 + childPosition);