2013-04-11 27 views
-1

我正在使用SlidingMenu在我的應用程序中執行,我想要android.R.id.home按鈕來打開/關閉側面菜單。在活動內部,我使用Fragment來顯示信息。我希望主頁按鈕充當後退按鈕。如何在Activity之前調用Fragment的onOptionItemSelected?

的問題是,活動的onOptionsItemSelected在活動片段的一個被調用。這是普通的行爲嗎?或者我做錯了什麼?

我在我的項目中也使用了ActionBarSherlock,但我不認爲這很重要。

正在實現我自己的界面這裏唯一的解決方案嗎?

回答

0

完成將onOptionsItemSelected從Activity移動到我的基本片段類。

基地內片段類,我有這些:

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 

    switch(item.getItemId()){ 
     case android.R.id.home: 
      // Toggle slide menu 
      getBaseActivity().getSlidingMenu().toggle(true); 
      break; 
    } 
    return super.onOptionsItemSelected(item); 
} 

protected boolean useHomeAsBack(MenuItem item){ 
    switch(item.getItemId()){ 
     case android.R.id.home: 
      Log.v(TAG, "useHomeAsBack - onOptionsItemSelected"); 
      getSherlockActivity().onBackPressed(); 
      return true; 
    } 
    return false; 
} 

也叫setHasOptionsMenu(true);onAttach爲好。

裏面,我想用回,而不是實際的片段,我有:

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    if(useHomeAsBack(item)) return true; 
    return super.onOptionsItemSelected(item); 
} 

不過,我期望片段的onOptionsItemSelected能夠覆蓋或優先於活動的。不知道那會是什麼原因。

1

沒錯,昨晚我和爲此而努力,但最終設法解決它,所以這裏是我的解決方案: 這些是MainActivity相關部分:

import com.actionbarsherlock.app.ActionBar; 
import com.actionbarsherlock.app.SherlockFragmentActivity; 
import com.actionbarsherlock.view.Menu; 
import com.actionbarsherlock.view.MenuItem; 

public class MainActivity extends SherlockFragmentActivity { 
. 
. 
. 
    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getSupportMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item){ 
     return super.onOptionsItemSelected(item); 
    } 

} 

這裏是我的菜單的main.xml:

<menu xmlns:android="http://schemas.android.com/apk/res/android" > 

    <item 
     android:id="@+id/action_settings" 
     android:orderInCategory="100" 
     android:showAsAction="never" 
     android:title="@string/action_settings"/> 

</menu> 

,這裏是我的片段:

import com.actionbarsherlock.app.SherlockFragment; 
import com.actionbarsherlock.view.Menu; 
import com.actionbarsherlock.view.MenuInflater; 
import com.actionbarsherlock.view.MenuItem; 

public class TestFrag extends SherlockFragment { 

    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     . 
     . 
     setHasOptionsMenu(true); 
    } 

    @Override 
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 
     menu.add(Menu.NONE, android.R.id.home, 100, "Home"); 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item){ 
     switch(item.getItemId()) 
     { 
     case android.R.id.home: 
//   Do whatever you want when Home is clicked. 
      Toast.makeText(getSherlockActivity(), "Home is clicked", Toast.LENGTH_SHORT).show(); 
      return true; 
     default: 
      return super.onOptionsItemSelected(item); 
     } 
    } 
} 

這就是我得到: Menu items from both the parent activity and the fragment.

我希望這有助於以任何方式。

+0

雖然這並不能真正解決我遇到的問題。在其他一些情況下,這可能是一個好主意。我從來沒有想過要這樣做。 – RobGThai 2013-04-12 07:11:47

相關問題