2015-10-03 28 views
0

我正在以下错误尝试“上的空对象引用

尝试调用虚拟方法‘无效 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<Stack_Items> 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<Stack_Items>(); 

     //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<Stack_Items> arrayList; 
    LayoutInflater inflater; 
    ViewHolder holder = null; 

    public Stack_Adapter(Context context, ArrayList<Stack_Items> 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; 
    } 

} 

回答

3

你正在做的:

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; 
1

试试这个里面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; 

    } 
0

R.id.stackView1没有发现,当你尝试分配stackView,所以它是null

0

这样做

您首先需要膨胀布局并调用findViewById()方法返回View,因此getActivity()。findViewById应该是rootView.findViewByID。

您的代码还存在其他一些问题。像getctivity()。getApplicationContext一样,getActivity()很好。

相关问题