2012-12-13 48 views
2

我目前使用FragmentStatePagerAdapter,我希望它具有「向上導航」功能(DisplayHomeAsUpEnabled)。當我設置下面的代碼時,它顯示爲正確的導航後退按鈕。但是當我點擊它時,什麼都沒有發生,你們能看到我的任何東西,在我的代碼中做錯了,按下「向上導航」按鈕時沒有錯誤,並且沒有編譯器錯誤。爲什麼我的android.R.id.home沒有在我的片段中調用?

這裏是代碼,它在「public boolean onOptionsItemSelected(MenuItem item){」它在底部感興趣。

public class ShareholdingDetailFragment extends FragmentActivity { 

    final int NUM_ITEMS = Portfolio.getPortfolio().count(); 

    MyAdapter mAdapter; 

    ViewPager mPager; 
    Bundle extras; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     System.out.println(NUM_ITEMS + "e"); 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.shareholdingdetailview_fragment_wrapper); 

     mAdapter = new MyAdapter(getSupportFragmentManager()); 

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


    } 

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

     public int getCount() { 
      return NUM_ITEMS; 
     } 

     public Fragment getItem(int position) { 
      return ShareholdingFragment.newInstance(position); 
     } 
    } 

    public static class ShareholdingFragment extends Fragment { 
     int mNum; 

     static ShareholdingFragment newInstance(int num) { 
      ShareholdingFragment f = new ShareholdingFragment(); 

      // Supply num input as an argument. 
      Bundle args = new Bundle(); 
      args.putInt("num", num); 
      f.setArguments(args); 

      return f; 
     } 

     @Override 
     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      mNum = getArguments() != null ? getArguments().getInt("num") : 1; 
     } 

     @SuppressLint({ "NewApi", "NewApi" }) 
     @Override 
     public View onCreateView(LayoutInflater inflater, ViewGroup container, 
       Bundle savedInstanceState) { 
      View view = inflater.inflate(R.layout.shareholdingdetailview_fragment, container, false); 

      /****************Setting the Display as home and it shows*******************/ 
      ActionBar bar = getActivity().getActionBar(); 
      bar.setDisplayHomeAsUpEnabled(true); 
      /**********************************/ 

      return view; 
     } 

      @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 


     switch (item.getItemId()) { 
       case android.R.id.home://Not working 
System.out.println("test");//This isn't printed out 
        Intent upIntent = new Intent(getActivity(), DetailShareHoldingActivity.class); 
        if (NavUtils.shouldUpRecreateTask(getActivity(), upIntent)) { 


        getActivity().finish(); 
       } else { 
        NavUtils.navigateUpTo(getActivity(), upIntent); 
       } 
       return true; 
     } 
     return super.onOptionsItemSelected(item); 
    } 
    } 
} 

回答

5

嘗試添加:setHasOptionsMenu(true);在ShareholdingFragment的onCreate()中。

+0

它也看起來你已經把onOptionsItemSelected(...)在你的片段,而不是ShareholdingDetailFragment。嘗試移動它也可能解決你的問題=) –

+0

謝謝解決它=) – anders

2

在配置操作欄時,在API級別14和更高版本上添加setHomeButtonEnabled(true)。在API級別11-13上,主頁按鈕被自動啓用。

2

如果您使用新的工具欄和ActionbarDrawerToggle。您可以直接分配clickHandler。對於我的活動,有這個抽屜工具欄我實現的一個接口,如果在根,使抽屜,

@Override 
    public void enableDrawer(boolean enable) { 
     mDrawerToggle.setDrawerIndicatorEnabled(enable); 
     mDrawerToggle.setToolbarNavigationClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
// Pop fragment back stack or pass in a custom click handler from the fragment. 
      } 
     }); 
    } 
相關問題