尝试在空对象引用上调用虚方法”

我收到以下错误

尝试在空对象引用上调用虚方法’void android.widget.StackView.setAdapter(android.widget.Adapter)’

在这条线上

stackView.setAdapter(adapter); 

完整的片段EventsFragment.java

 public class EventsFragment extends android.support.v4.app.Fragment { private StackView stackView; private ArrayList list; TypedArray eventLogo ; String eventName[]; @Nullable public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { eventLogo= getResources().obtainTypedArray(R.array.event_stack_icon); eventName = getResources().getStringArray(R.array.event_stack); stackView = (StackView) getActivity().findViewById(R.id.stackView1); list = new ArrayList(); //Adding items to the list for (int i = 0; i < eventLogo.length(); i++) { list.add(new Stack_Items(eventName[i], eventLogo.getResourceId(i,-1))); } //Calling adapter and setting it over stackView Stack_Adapter adapter = new Stack_Adapter(getActivity().getApplicationContext(), list ); stackView.setAdapter(adapter); adapter.notifyDataSetChanged(); return inflater.inflate(R.layout.events_layout, null); } } 

Stack_Adapter.java

 public class Stack_Adapter extends BaseAdapter { ArrayList arrayList; LayoutInflater inflater; ViewHolder holder = null; public Stack_Adapter(Context context, ArrayList arrayList) { this.arrayList = arrayList; this.inflater = LayoutInflater.from(context); } @Override public int getCount() { return arrayList.size(); } @Override public Stack_Items getItem(int pos) { return arrayList.get(pos); } @Override public long getItemId(int pos) { return pos; } @Override public View getView(int pos, View view, ViewGroup parent) { if (view == null) { view = inflater.inflate(R.layout.stack_layout, parent, false); holder = new ViewHolder(); holder.text = (TextView) view.findViewById(R.id.textView1); holder.image = (ImageView) view.findViewById(R.id.imageView1); view.setTag(holder); } else { holder = (ViewHolder) view.getTag(); } holder.text.setText(arrayList.get(pos).getName()); holder.image.setBackgroundResource(arrayList.get(pos).getImage()); return view; } public class ViewHolder { TextView text; ImageView image; } } 

Stack_Items

 public class Stack_Items { String name; Integer image; public Stack_Items(String name, Integer image) { this.name = name; this.image = image; } public String getName() { return name; } public int getImage() { return image; } } 

你在做:

 stackView = (StackView) getActivity().findViewById(R.id.stackView1); 

您的stackViewnullgetActivity().findViewById返回null

你为什么使用getActivity()

stackView在哪里? 你应该从正确的xml加载它。

正如@Tauqir所提到的,你需要像这样膨胀正确的xml:

 View view = inflater.inflate(R.layout.events_layout, null); stackView = (StackView) view.findViewById(R.id.stackView1); return view; 

onCreateView中尝试这个

  @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.events_layout, null); -------------some codes ------------ stackView = (StackView) view.findViewById(R.id.stackView1); -------------some codes ------------ return view; } 

做这个

 View rootView = inflater.inflate(R.layout.events, container, false); stackView = (StackView) rootview.findViewById(R.id.stackView1); . . . return rootview 

首先需要对布局进行膨胀并在它返回的View上调用findViewById(),因此getActivity()。findViewById应该是rootView.findViewByID。

您的代码也存在其他一些问题。 像getctivity()。getApplicationContext一样,只需getActivity()就可以了。

尝试分配stackView ,因此它为null