大佬教程收集整理的这篇文章主要介绍了android – 我是否需要为ExpandableListView提供多个viewHolders?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我使用这个视图错误了吗?我在第165行得到一份NPE.有一个明显的原因导致我失踪吗?如果我使用expandablelistview,是否需要组视图和子视图?我标记了第165行,试图让它更容易在眼睛上.
非常感谢
获得NPE的我的expandablelistview:
public class Myexpandablelistadapter extends Baseexpandablelistadapter {
private Context mContext;
private ArrayList<ContactNameItems> mListDataHeader;
private ArrayList<Boolean> phonenumbercheckStates;
private ArrayList<String> SELEctednumbers;
private HashMap<String, List<ContactPhoneItems>> mListDataChild;
private ViewHolder mViewHolder;
public Myexpandablelistadapter(Context context,
ArrayList<ContactNameItems> listDataHeader,
HashMap<String, List<ContactPhoneItems>> listDataChild,
ArrayList<String> listOfnumbers) {
mContext = context;
mListDataHeader = listDataHeader;
mListDataChild = listDataChild;
SELEctednumbers = listOfnumbers;
}
@Override
public int getGroupCount() {
return mListDataHeader.size();
}
@Override
public ContactNameItems getGroup(int groupPosition) {
return mListDataHeader.get(groupPosition);
}
@Override
public long getGroupId(int groupPosition) {
return groupPosition;
}
@Override
public View getGroupView(int groupPosition, Boolean isExpanded,
View convertView, ViewGroup parent) {
String contactName = getGroup(groupPosition).getName();
Bitmap contactimage = getGroup(groupPosition).getImage();
if (convertView == null) {
LayoutInflater inflater = (LayoutInflater) mContext
.getSystemservice(Context.LAYOUT_INFLATER_serviCE);
convertView = inflater.inflate(R.layout.contact_name_item, null);
mViewHolder = new ViewHolder();
mViewHolder.mContactName = (TextView) convertView
.findViewById(R.id.lblListHeader);
mViewHolder.mContactimage = (ImageView) convertView
.findViewById(R.id.ivContactPhoto);
convertView.setTag(mViewHolder);
} else {
mViewHolder = (ViewHolder) convertView.getTag();
}
if (contactimage != null) {
mViewHolder.mContactimage.setImageBitmap(contactimagE);
} else {
mViewHolder.mContactimage.setImageresource(R.drawable.default_contact);
}
mViewHolder.mContactName.setText(contactName);
return convertView;
}
@Override
public int getChildrenCount(int groupPosition) {
return mListDataChild.get(mListDataHeader.get(groupPosition).getName())
.size();
}
@Override
public ContactPhoneItems getChild(int groupPosition, int childPosition) {
return mListDataChild.get(mListDataHeader.get(groupPosition).getName())
.get(childPosition);
}
@Override
public long getChildId(int groupPosition, int childPosition) {
return childPosition;
}
@Override
public View getChildView(int groupPosition, final int childPosition,
Boolean isLastChild, View convertView, ViewGroup parent) {
String numberText = getChild(groupPosition, childPosition).getnumber();
String typeText = getChild(groupPosition, childPosition).getPhoneType();
final int mGroupPosition = groupPosition;
if (convertView == null) {
LayoutInflater inflater = (LayoutInflater) this.mContext
.getSystemservice(Context.LAYOUT_INFLATER_serviCE);
convertView = inflater.inflate(R.layout.contact_detail_item, null);
mViewHolder = new ViewHolder();
mViewHolder.@R_717_6165@number = (TextView) convertView
.findViewById(R.id.tv_phone_number);
mViewHolder.@R_717_6165@Type = (TextView) convertView
.findViewById(R.id.tv_phone_typE);
mViewHolder.mcheckBox = (checkBox) convertView
.findViewById(R.id.checkBox);
convertView.setTag(mViewHolder);
} else {
mViewHolder = (ViewHolder) convertView.getTag();
}
mViewHolder.@R_717_6165@number.setText(numberText);
mViewHolder.@R_717_6165@Type.setText(typeText);
phonenumbercheckStates = new ArrayList<Boolean>();
for (int i = 0; i < mListDataChild.size(); i++) {
phonenumbercheckStates.add(false);
}
if (phonenumbercheckStates.get(childPosition)) {
mViewHolder.mcheckBox.setchecked(true);
} else {
mViewHolder.mcheckBox.setchecked(false);
}
mViewHolder.mcheckBox.setOnClickListener(new View.onClickListener() {
@Override
public void onClick(View v) {
/*this is line 165*/ if (mViewHolder.mcheckBox.ischecked()) { /*this is line 165*/
phonenumbercheckStates.set(childPosition, truE);
SELEctednumbers.add(mListDataChild
.get(mListDataHeader.get(mGroupPosition).getName())
.get(childPosition).getnumber());
} else {
phonenumbercheckStates.set(childPosition, falsE);
SELEctednumbers.remove(mListDataChild
.get(mListDataHeader.get(mGroupPosition).getName())
.get(childPosition).getnumber());
}
}
});
return convertView;
}
@Override
public Boolean isChildSELEctable(int groupPosition, int childPosition) {
return false;
}
@Override
public Boolean hasStablEIDs() {
return false;
}
public ArrayList<Boolean> getcheckednumbers() {
return phonenumbercheckStates;
}
public ArrayList<String> getSELEctednumbers() {
return SELEctednumbers;
}
private class ViewHolder {
TextView mContactName;
TextView @R_717_6165@number;
TextView @R_717_6165@Type;
ImageView mContactimage;
checkBox mcheckBox;
}
}
如果它有帮助,这是日志:
01-25 04:34:31.695: E/AndroidRuntime(7074): FATAL EXCEPTION: main
01-25 04:34:31.695: E/AndroidRuntime(7074): java.lang.NullPointerException
01-25 04:34:31.695: E/AndroidRuntime(7074): at com.psesto.journeysend.contactpicker.Myexpandablelistadapter$1.onClick(Myexpandablelistadapter.java:165)
01-25 04:34:31.695: E/AndroidRuntime(7074): at android.view.View.performClick(View.java:4204)
01-25 04:34:31.695: E/AndroidRuntime(7074): at android.widget.CompoundButton.performClick(CompoundButton.java:100)
01-25 04:34:31.695: E/AndroidRuntime(7074): at android.view.View$PerformClick.run(View.java:17355)
01-25 04:34:31.695: E/AndroidRuntime(7074): at android.os.Handler.handleCallBACk(Handler.java:725)
01-25 04:34:31.695: E/AndroidRuntime(7074): at android.os.Handler.dispatchmessage(Handler.java:92)
01-25 04:34:31.695: E/AndroidRuntime(7074): at android.os.Looper.loop(Looper.java:137)
01-25 04:34:31.695: E/AndroidRuntime(7074): at android.app.ActivityThread.main(ActivityThread.java:5041)
01-25 04:34:31.695: E/AndroidRuntime(7074): at java.lang.reflect.Method.invokeNative(Native Method)
01-25 04:34:31.695: E/AndroidRuntime(7074): at java.lang.reflect.Method.invoke(Method.java:511)
01-25 04:34:31.695: E/AndroidRuntime(7074): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
01-25 04:34:31.695: E/AndroidRuntime(7074): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
01-25 04:34:31.695: E/AndroidRuntime(7074): at dalvik.system.NativeStart.main(Native Method)
解决方法:
您的适配器中有一个ViewHolder引用用于所有视图.这没有任何意义,因为List中的每个View都有自己的ViewHolder实例,您可以通过View.getTag()获得它.
您可以使用您需要的位置设置一个int []作为checkBox的标记
int[] positions = new int[2];
positions[0] = childPosition;
positions[1] = groupPosition;
mViewHolder.mcheckBox.setTag(positions);
并在onClick()
checkBox Box = (checkBox) v;
int[] posTag = (int[]) v.getTag();
以上是大佬教程为你收集整理的android – 我是否需要为ExpandableListView提供多个viewHolders?全部内容,希望文章能够帮你解决android – 我是否需要为ExpandableListView提供多个viewHolders?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。