2012-03-09 3 views
14

조각에서 수행되는 작업을 기반으로 활동 작업 표시 줄의 내용을 변경하는 방법에 대한 간단한 예제를 제공 할 수 있습니까? 내 의도 :Android : 조각에서 ActionBar 메뉴 항목 변경

정상 메뉴 항목 -> 조각에있는 일부 항목 이동 -> 메뉴 항목이 저장/삭제 버튼으로 변경됩니다.

첫 번째 충동은 활동과 프래그먼트 모두에서 브로드 캐스트 수신기를 크로스 토크로 설정하는 것이지만 이것이 맞는지 확실하지 않습니다.

답변

7

다음은 저에게 적합합니다. 나는 조각 안에 ListView.MultiChoiceModeListener를 구현하는 사용자 정의 클래스가 : 당신이 감지하는 방법을 감안할 때

public void onItemCheckedStateChanged(ActionMode mode, int position, long id, boolean checked) { 
    // Choose the correct Action Bar menu to display 
    int menu = myCondition == true ? R.menu.my_default_menu : R.menu.my_menu_2; 

    // Configure to use the desired menu 
    mode.getMenu().clear(); 
    MenuInflater inflater = getActivity().getMenuInflater(); 
    inflater.inflate(menu); 
} 

ListView.MultiChoiceModeListener 당신을 위해 작동하지 않을 수 확장, '조각에 뭔가가 이동', 그러나 희망이 메뉴를 변경하는 방법을 보여줍니다. 열쇠는 ActionMode 인스턴스에 대한 액세스 권한을 얻는 것입니다.

+0

활동의 ActionMode 인스턴스는 어디에서 얻을 수 있습니까? – Neilers

4

contextual action mode을 사용하고 싶습니다. 드래그 이벤트에서 작업 표시 줄의 내용을 사용자가 수행 할 작업과 관련된 메뉴 항목으로 바꿀 수있는 새로운 ActionMode를 시작합니다. 사용자가 작업을 선택하면 작업 모드가 끝나고 작업 표시 줄은 이전 상태로 돌아갑니다.

20

조각은 작업 표시 줄의 메뉴를 변경할 수 있습니다. 이를 위해 조각의 oncreate()에 필요한 플래그를 추가해야합니다. setHasOptionsMenu(true);

조각이로드되면 활동과 마찬가지로 onCreateOptionsMenu(Menu menu, MenuInflater inflater)에 전화를 겁니다. 그런 다음 메뉴를 변경하십시오.

메뉴를 전체적으로 조각으로 저장하고 변경할 때마다 변경 사항을 적용하십시오.

onAttach (활동 활동)를 사용하여 FragmentActivity에서 액션 바을 얻기 위해이를 시도해보십시오 액션 바 인스턴스 메뉴 당신과 함께 도움이 될 것이다 그러나 확실하게 도움이 될 것입니다 경우

+1

이것은 가장 정확한 답입니다. –

1

확실하지가 .. 여기에 대해 얻을 수있는 방법 메서드에서. 모든

먼저이

를 수행 YourFragment 클래스 YourFragment의 한 OnCreate 방법에서 다음

@Override 
public void onAttach(Activity activity){ 
    context = (YourFragmentActivity)activity; 
    super.onAttach(activity); 
} 

public class YourFragment extends Fragment { 

    private YourFragmentActivity context; 
} 

무시처럼 조각이 당신의 FragmentActivity의 전역 개체를 만들

@Override 
public View onCreateView(LayoutInflater inflater, 
         ViewGroup container, Bundle savedInstanceState){ 
    ... 

    android.support.v7.ActionBar actionBar = context.getSupportActionBar(); 

    ... 
} 
관련 문제