2012-12-13 2 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

것도 보인다. 움직여보십시오. 당신의 문제를 해결할 수도 있습니다 =) –

+0

고맙습니다. 해결 =) – anders

2

작업 표시 줄을 구성 할 때 API 레벨 14 이상에 setHomeButtonEnabled(true)을 추가하십시오. API 레벨 11-13에서 홈 버튼이 자동으로 활성화됩니다.

2

새 툴바 및 ActionbarDrawerToggle을 사용하는 경우 clickHandler를 직접 할당 할 수 있습니다. 대신 ShareholdingDetailFragment의 당신의 조각에 onOptionsItemSelected (...)를 넣어 한 나는이 루트에있는 경우 서랍을 가능하게하는 인터페이스를 구현이 서랍 도구 모음이 내 활동,

@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. 
      } 
     }); 
    } 
관련 문제