-2

我知道這是非常普遍的問題,但無法弄清楚什麼是錯誤的。獲取NullPointerException錯誤視圖尋呼機,同時在視圖尋呼機中獲取片段方法活動

片段Java類

// newInstance constructor for creating fragment with arguments 
     public static BpDetails newInstance(int page) { 
      BpDetails fragmentFirst = new BpDetails(); 
      Bundle args = new Bundle(); 
      args.putInt("someInt", page); 
      fragmentFirst.setArguments(args); 
      return fragmentFirst; 
     } 

     @Override 
     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      page = getArguments().getInt("someInt", 0); 
     } 

     public String getSystolic(){ 

      return this.systolic.getText().toString(); 

     } 

    /* public String getDiastolic(){ 

     return this.diastolic.getText().toString(); 
     }*/ 


    // Inflate the view for the fragment based on layout XML 
     @Override 
     public View onCreateView(LayoutInflater inflater, ViewGroup container, 
           Bundle savedInstanceState) { 
      final View view = inflater.inflate(R.layout.bp_details, container, false); 

      Log.i("View ",view.toString()); 

      Log.i("DOB is ",Long.toString(Constants.dob)); 


      systolic =(EditText) view.findViewById(R.id.systolic); 
      diastolic =(EditText) view.findViewById(R.id.diastolic); 


      return view; 
     } 

ViewPager活動

vpPager = (ViewPager) findViewById(R.id.view_pager); 

     adapterViewPager = new MyPagerAdapter(getSupportFragmentManager()); 
     vpPager.setAdapter(adapterViewPager); 


     findViewById(R.id.btn_prev).setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 

       // checking for last page 
       // if last page home screen will be launched 
       int current = getItem(-1); 
       if (current!=0) 
        prevPage=current-1; 
       if (current < 4) { 
        // move to next screen 
        vpPager.setCurrentItem(current); 
       } else { 
        //final reached. 
       } 

      } 
     }); 

     findViewById(R.id.btn_next).setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       // checking for last page 
       // if last page home screen will be launched 
       int current = getItem(+1); 

       if (current!=0) 
        prevPage=current-1; 

       System.out.println("Prev page "+prevPage); 

       if (current < 4) { 
        // move to next screen 
Fragment bpFragment=adapterViewPager.getItem(vpPager.getCurrentItem()); 

        if (bpFragment instanceof BpDetails){ 

         System.out.println("Current item is "+vpPager.getCurrentItem()); 

         BpDetails fr = (BpDetails)adapterViewPager.getItem(vpPager.getCurrentItem()); 

         **String systolicString = fr.getSystolic();** //error point 

         Log.i("Systolic is ",systolicString); 
        } 


       } else { 

        //final reached. 
       } 
      } 
     }); 


    } 

    private int getItem(int i) { 
     return vpPager.getCurrentItem() + i; 
    } 


    public static class MyPagerAdapter extends FragmentPagerAdapter { 
     private static int NUM_ITEMS = 4; 
     private static int mSelectedPosition; 

     public MyPagerAdapter(FragmentManager fragmentManager) { 
      super(fragmentManager); 
      //mSelectedPosition=selectedPosition; 
     } 

     // Returns total number of pages 
     @Override 
     public int getCount() { 
      return NUM_ITEMS; 
     } 

     // Returns the fragment to display for that page 
     @Override 
     public Fragment getItem(int position) { 
      switch (position) { 
       case 0: // Fragment # 0 - This will show FirstFragment 
        return BasicDetails.newInstance(0); 
       case 1: 
        return BpDetails.newInstance(1); 
       case 2: 
        return BslDetails.newInstance(2); 
       case 3: 
        return Summary.newInstance(3); 

       default: 
        return null; 
      } 
     } 


    } 

爲什麼我收到NullPointerException異常,因爲我訪問片段的方法,公衆纔去到下一個片段。 投票前請留下投票原因,以便我可以改進問題。

編輯:

我才知道,因爲我調用的GetItem()方法,這就是爲什麼片段的所有的變量設置爲null就是爲什麼我收到NullPointerException異常。有什麼辦法可以解決這個問題嗎?

回答

0

你應該重寫你的ViewPagerAdapter和存儲retuened片段

這是因爲每次你調用getItem()時間函數返回一個新的片段,而只能由viewpager本身的片段將調用oncreateView調用,所以你調用getItem沒有初始化收縮,因此第二次導致NullPointerException異常

供參考:

public static class MyPagerAdapter extends FragmentPagerAdapter { 
    private static int NUM_ITEMS = 4; 
    private static int mSelectedPosition; 
    Map<Integer,Fragment> map= new HashMap<>(); 

    public MyPagerAdapter(FragmentManager fragmentManager) { 
     super(fragmentManager); 
     //mSelectedPosition=selectedPosition; 
    } 

    // Returns total number of pages 
    @Override 
    public int getCount() { 
     return NUM_ITEMS; 
    } 

    // Returns the fragment to display for that page 
    @Override 
    public Fragment getItem(int position) { 

     Fragment f = map.get(position) 
     if(f!=null){ 
      return f; 
     } 
     switch (position) { 

      case 0: // Fragment # 0 - This will show FirstFragment 
       f = BasicDetails.newInstance(0); 
      case 1: 
       f = return BpDetails.newInstance(1); 
      case 2: 
       f = return BslDetails.newInstance(2); 
      case 3: 
       f = return Summary.newInstance(3); 

      default: 
       return null; 
     } 

     map.put(postion,f); 
     return f; 
    } 


} 
相關問題