2012-12-13 52 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. 
      } 
     }); 
    } 
相关问题