2013-06-18 82 views
0

我在Android项目的工作与活动的片段具有MyAdapter:addView()内的片段引发NullPointerException异常

public static class MyAdapter extends FragmentPagerAdapter { 
     public MyAdapter(FragmentManager fragmentManager) { 
      super(fragmentManager); 
     } 

     @Override 
     public int getCount() { 
      return ITEMS; 
     } 

     @Override 
     public Fragment getItem(int position) { 
      switch (position) { 
      case 0: // Fragment # 0 - Pokazuje listę 
       return ImageFragment.init(position); 
       //return TruitonListFragment.init(position); 
      case 1: // Fragment # 1 - Pokazuje wybór 
       return ImageFragment.init(position); 
      default: 
       return ImageFragment.init(position); 
      } 
     } 
    } 

现在我有一个扩展片段ImageFragment类。我想在我的ImageFragment中添加View()来从布局元素,并且我有NullPointerException。它在Activity中工作,但在Fragment中不起作用。有可能解决这个问题,到底发生了什么?

public class ImageFragment extends Fragment implements OnClickListener { 

    int fragVal; 

    public static ImageFragment init(int val) { 
     ImageFragment truitonFrag = new ImageFragment(); 
     // Supply val input as an argument. 
     Bundle args = new Bundle(); 
     args.putInt("val", val); 
     truitonFrag.setArguments(args); 
     return truitonFrag; 
    } 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     InitializeDatabase(); // Wczytanie zasobów 

     fragVal = getArguments() != null ? getArguments().getInt("val") : 1; 

     // 
     AddonsList = new ArrayList<myAddons>(); 

     // 
     Parent = new ArrayList<Long>(); 
     Parent.add((long) 0); 
     GenerateNodeTree((long) 0); // Ustawienie fragmentu na początek 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 

     View layoutView = inflater.inflate(R.layout.fragment_pager_list, 
       container, false); 
     linearLayout = new LinearLayout(getActivity()); 
     linearLayout = (LinearLayout) layoutView.findViewById(R.id.Groups); 
     linearLayout = new LinearLayout(getActivity()); 
     GoTop = (Button) layoutView.findViewById(R.id.Button02); 
     GoHome = (Button) layoutView.findViewById(R.id.Button01); 

     return layoutView; 
    } 

    private void GenerateNodeTree(Long TreeNode) { 
     try { 
      currentProductList = new ArrayList<Products>(); 
      ClearView(); 

      for(ProductGroups grupa : myGroupList) { 
       Log.i("mm",grupa.getNazwa()); 

       LinearLayout row = new LinearLayout(getActivity()); 
       row.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT)); 
       if(grupa.getPARENTID() == TreeNode & grupa.getPOSPRODID() == 0) { // Przyciski kategorii 

        ImageButton imgTag = new ImageButton(getActivity()); 
        Button btnTag = new Button(getActivity()); 

        int k = R.drawable.icon_empt; 
        imgTag.setImageResource(k); 

        btnTag.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); 
        btnTag.setText(grupa.getNazwa()); 
        btnTag.setId((int) grupa.getPOSPRODGRPID()); 
        btnTag.setOnClickListener(this); 

        row.addView(imgTag); 
        row.addView(btnTag); 
        linearLayout.addView(row); // HERE NULL POINTER APPEARS 
       } 

      } 
     } 
     catch(Exception exc) 
     { 
      //Print.StandardToast(getActivity(), exc.getStackTrace().toString()); 
     } 
     // Koniec generowania widoku 
    } 

} 

回答

1

你似乎并不在你的片段类linearLayout场(代码遗漏?)。无论如何,看起来你初始化了onCreateView()回调中的linearLayout字段。问题在于,您正试图在onCreate()方法(通过GenerateNodeTree()调用)方法中使用该方法,该方法在onCreateView()之前称为(因此linearLayout将不会在该点初始化)。因此,请拨onCreateView()onActivityCreated()中的GenerateNodeTree((long) 0);呼叫,该呼叫在onCreateView()后调用。

+0

你说得对,我在调用GenerateNodeTree,它在初始化之前使用linearLayout。我在onCreateView中使用GenerateNodeTree,并没有例外! :) 谢谢! – boski

相关问题