我在我的ExpandListAdapter类中的LayoutInflator中获得了一个Null指针异常,它扩展了BaseExpandableListAdaptor。
import java.util.ArrayList;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseExpandableListAdapter;
import android.widget.TextView;
public class ExpandListAdapter extends BaseExpandableListAdapter{
private Context context;
private ArrayList<ExpandListGroup> groups;
public ExpandListAdapter(Context context, ArrayList<ExpandListGroup> groups){
this.context=context;
this.groups=groups;
}
public void addItem(ExpandListChild item, ExpandListGroup group){
if(!groups.contains(group)){
groups.add(group);
}
int index=groups.indexOf(group);
ArrayList<ExpandListChild> ch=groups.get(index).getItems();
ch.add(item);
groups.get(index).setItems(ch);
}
public Object getChild(int groupPosition, int childPosition){
ArrayList<ExpandListChild> chList=groups.get(groupPosition).getItems();
return chList.get(childPosition);
}
public long getChildId(int groupPosition, int childPosition){
return childPosition;
}
public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View view, ViewGroup parent){
ExpandListChild child = (ExpandListChild) getChild(groupPosition, childPosition);
if (view == null) {
LayoutInflater infalInflater = (LayoutInflater) this.context.getSystemService(context.LAYOUT_INFLATER_SERVICE);
view = infalInflater.inflate(R.layout.expandlist_child_item, null);
}
TextView tv = (TextView) view.findViewById(R.id.tvChild);
tv.setText(child.getName().toString());
tv.setTag(child.getTag());
// TODO Auto-generated method stub
return view;
}
public int getChildrenCount(int groupPosition) {
ArrayList<ExpandListChild> chList = groups.get(groupPosition).getItems();
return chList.size();
}
public Object getGroup(int groupPosition) {
return groups.get(groupPosition);
}
public int getGroupCount() {
return groups.size();
}
public long getGroupId(int groupPosition) {
// TODO Auto-generated method stub
return groupPosition;
}
public View getGroupView(int groupPosition, boolean isLastChild, View view, ViewGroup parent) {
ExpandListGroup group = (ExpandListGroup) getGroup(groupPosition);
if (view == null) {
LayoutInflater inf = (LayoutInflater) context.getSystemService(context.LAYOUT_INFLATER_SERVICE);
view = inf.inflate(R.layout.two_lines_list_layout, null);
}
TextView tv = (TextView) view.findViewById(R.id.line_book);
tv.setText(group.getName());
TextView tv2 = (TextView) view.findViewById(R.id.line_author);
tv2.setText(group.getAuthor());
return view;
}
public boolean hasStableIds() {
// TODO Auto-generated method stub
return true;
}
public boolean isChildSelectable(int arg0, int arg1) {
// TODO Auto-generated method stub
return true;
}
}
我在行中得到异常:LayoutInflater infalInflater =(LayoutInflater)this.context.getSystemService(context.LAYOUT_INFLATER_SERVICE);
此外,它在该行显示警告“静态字段Context.LAYOUT_INFLATER_SERVICE应以静态方式访问”
请帮助.. !!
答案 0 :(得分:3)
我在行中得到异常:LayoutInflater infalInflater =(LayoutInflater)this.context.getSystemService(context.LAYOUT_INFLATER_SERVICE);
这是因为context
是null
。确保您将Activity
传递给ExpandListAdapter
构造函数。
此外,它在该行显示警告&#34;静态字段Context.LAYOUT_INFLATER_SERVICE应以静态方式访问&#34;
将构造函数更改为Activity
而不是Context
,然后更改:
LayoutInflater infalInflater = (LayoutInflater) this.context.getSystemService(context.LAYOUT_INFLATER_SERVICE);
为:
LayoutInflater infalInflater = whateverYouDecideToCallYourActivityDataMember.getLayoutInflater();
答案 1 :(得分:2)
首先是简单的部分。声明您应该以静态方式访问LAYOUT_INFLATER_SERVICE的警告要求您将其从context.LAYOUT_INFLATER_SERVICE更改为Context.LAYOUT_INFLATER_SERVICE(capitol'C'),以便您通过类而不是实例访问变量。
其次,空指针异常肯定发生在你的'context'变量上,所以无论何时实例化ExpandListAdapter,你都要给它一个上下文的空值。你没有给我那些代码,所以我无法调查它,但我建议你在onCreateView或onViewCreated中实例化你的ExpandListAdapter。如果你在一个活动中创建它,传递一个对活动的引用(即'this'),如果你在一个片段中创建它,则调用getActivity()。如果你的片段没有附加到活动上(这可能是你的问题),这将无效。