-1

我在我的FragmentActivity中使用dispatchKeyEvent並調用我的片段方法之一。以下是我使用我的FragmentActivity代碼:爲什麼當我從FragmentActivity調用Fragment的方法時ProgressBar變爲空?

public class ViewPagerFragment extends FragmentActivity{ 
    MyAdapter mAdapter; 
    ViewPager mPager; 

    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.viewpager_layout); 

     mAdapter = new MyAdapter(getSupportFragmentManager()); 
     mPager = (ViewPager) findViewById(R.id.pager); 
     mPager.setAdapter(mAdapter); 

     mPager.setCurrentItem(0); 
    } 

    public void onResume() { 
     super.onResume(); 
    } 

    public void onPause() { 
     super.onPause(); 
    } 

    public void onDestroy() { 
     super.onDestroy(); 
    } 

    @Override 
    public boolean dispatchKeyEvent(KeyEvent event) { 

     if(event.getKeyCode() == 66){ 
      FragmentPagerAdapter fragmentPagerAdapter = (FragmentPagerAdapter) mPager.getAdapter(); 
      ((SecondFragment)fragmentPagerAdapter.getItem(1)).myOnKeyDown(input_str); 
     } 

     return super.dispatchKeyEvent(event); 
    } 

    public void onNewIntent(Intent intent) { 
     super.onNewIntent(getIntent()); 
    } 

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

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

     @Override 
     public Fragment getItem(int position) { 
      switch (position) { 
      case 0: 
       return new FirstFragment(); 
      case 1: 
       return new SecondFragment(); 

      default: 
       return null; 
      } 
     } 
    } 
} 

以下是我的SecondFragment代碼。

public class SecondFragment extends Fragment{ 
    ProgressBar spinner; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
    } 

    public void onResume(){ 
     super.onResume(); 
    }  

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.secondfragment_layout, container, false); 

     spinner = (ProgressBar) view.findViewById(R.id.spinner); 

     return view; 
    } 

    public void myOnKeyDown(String barcode){ 
     // following line gives NullPointerException 
     spinner.setVisibility(ProgressBar.VISIBLE); 
    } 
} 

在我SecondFragment的onCreateView我已經初始化的進度是在SecondFrament佈局文件。但是當我在我的FragmentActivity中從dispatchKeyEvent調用myOnKeyDown時,它總是變爲空。爲何如此,我該如何解決?提前致謝。

+1

我想你需要添加更多的上下文來幫助診斷這個問題。這聽起來像你有兩個片段的活動,但沒有更多的上下文(和更多的代碼),很難提供任何幫助。 – Phil

+0

我已添加代碼。請看一看。 – Piscean

回答

0

您的SecondFragment的onCreateView()方法需要返回視圖。

return view; 

試試看。

+0

對不起,我錯過了這一行。剛添加它。感謝提及 – Piscean

相關問題