2013-03-27 55 views
1

下面是我ActionProvider類onPrepareSubMenu從未被稱爲即使hasSubMenu返回true

import java.util.Locale; 

import android.content.Context; 
import android.util.Log; 
import android.view.ActionProvider; 
import android.view.LayoutInflater; 
import android.view.SubMenu; 
import android.view.View; 
import android.widget.ImageButton; 

public class LocaleActionProvider extends ActionProvider { 
private static final String TAG = "LocaleActionProvider"; 

Context mCtx; 

public LocaleActionProvider(Context context) { 
    super(context); 
    mCtx = context; 
} 

@Override 
@Deprecated 
public View onCreateActionView() { 
    // Inflate the action view to be shown on the action bar. 
    LayoutInflater layoutInflater = LayoutInflater.from(mCtx); 
    View view = layoutInflater.inflate(R.layout.action_provider_locale, 
      null); 
    ImageButton button = (ImageButton) view.findViewById(R.id.localeButton); 
    // Set up flag icon for specific locale 
    Locale locale = Locale.getDefault(); 
    String locLan = locale.getLanguage(); 

    if (locLan.equals(Locale.CHINESE.getLanguage())) { 
     button.setImageResource(R.drawable.insready); 
    } else if (locLan.equals(Locale.ENGLISH.getLanguage())) { 
     button.setImageResource(R.drawable.ic_action_locale_en); 
    } else if (locLan.equals(Locale.FRENCH.getLanguage())) { 
     button.setImageResource(R.drawable.ic_action_search); 
    } 
    /* 
    * button.setOnClickListener(new View.OnClickListener() { 
    * 
    * @Override public void onClick(View v) { // Do something... } }); 
    */ 
    return view; 
} 

@Override 
public boolean hasSubMenu() { 
    return true; 
} 

@Override 
public void onPrepareSubMenu(SubMenu subMenu) { 
    Log.i(TAG, "onPrepareSubMenu()"); 
    // Clear since the order of items may change. 
    subMenu.clear(); 
    subMenu.add(0, 0, 0, "簡體中文"); 
    subMenu.add(0, 1, 1, "English"); 
    subMenu.add(0, 2, 2, "French"); 
} 

@Override 
public boolean onPerformDefaultAction() { 
    Log.i(this.getClass().getSimpleName(), "onPerformDefaultAction"); 

    return super.onPerformDefaultAction(); 
} 
} 

我曾嘗試使用調試器或Log.i()來監視onPrepareSubMenu()函數。但是onPrepareSubMenu()永遠不會被調用,換句話說,調試器不會停止在斷點處,也不會有日誌條目。

回答

4

我發現在onCreateActionView()中,您必須返回null才能調用onPrepareSubMenu()。然後,onCreateActionView()中的所有這些設置都需要進入onCreateOptionsMenu(),可能是MainActivity

相關問題