2013-04-26 180 views
0

我正在更新我的api 8+應用程序,原因是大部分目標市場不再在其設備上具有菜單按鈕。捕獲選項菜單微調點擊

我的解決方案不起作用。

所以,我使用ActionBarSherlock。

我已將我需要的按鈕移動到Sherlock菜單中,並且它們可以正常工作。

但我正在改變的活動有一個微調,它改變了返回的數據。 我想添加到Sherlock菜單(它確實出現),但我無法捕獲任何點擊它。

下面是截圖。頂尖的微調是新的;紫色塊中的所有東西都在那裏進行比較。

enter image description here

這是我使用的設置菜單並捕獲點擊代碼:

@Override 
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 

    menu.add(0, 1, 1, "Add Sleep Record").setIcon(R.drawable.btn_add) 
    .setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); 

    menu.add(0, 2, 2, "Create Report").setIcon(R.drawable.ic_listview_pdf) 
    .setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); 


    Spinner spinner = new Spinner(getSherlockActivity().getSupportActionBar() 
      .getThemedContext()); 
    ArrayAdapter<String> spinnerArrayAdapter = new ArrayAdapter<String>(getSherlockActivity() 
      .getSupportActionBar().getThemedContext(), R.layout.sherlock_spinner_item, 
      new String[]{"Last 7 days", "Last month", "Last 6 months", "Last year"}); 
    spinnerArrayAdapter.setDropDownViewResource(R.layout.sherlock_spinner_dropdown_item); 
    spinner.setAdapter(spinnerArrayAdapter); 

    menu.add(0, 3, 3, "Date Range") 
    .setActionView(spinner).setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); 
} 

public boolean onOptionsItemSelected(MenuItem item) { 
    // Handle item selection 
    switch (item.getItemId()) { 
    case 1: 
     Intent i=new Intent(getActivity(), SleepRecordAddActivity.class); 
     startActivity(i); 
     return true; 
    case 2: 
     tryCreateReport(); 
     return true; 
    case 3: 
     String boop ="I am here"; 

     String x= boop; 
     return true; 
    } 
    return false; 

}

我已經設置Spinner ID爲3,但開關onOptionsItemSelected不會在3上觸發。

此「活動」是SherlockFragment,它從SherlockFragmentActivity

+0

什麼是「Sherlock菜單」?你爲什麼不使用下拉式導航? http://developer.android.com/guide/topics/ui/actionbar.html#Dropdown – CommonsWare 2013-04-26 21:59:24

+0

導航是標籤刷卡活動。其中兩個片段顯示可以通過日期範圍更改的數據,可以從微調器中進行選擇(至少,它可以在我的舊標籤窗口小部件方法中) – DaveSav 2013-04-26 22:11:28

+0

「Sherlock菜單」是選項菜單 – DaveSav 2013-04-26 22:12:43

回答

0

嗯,事實證明,它不訪問onOptionsItemSelected可言。您只需像往常一樣添加OnItemSelectedListener。

Spinner spinner = new Spinner(getSherlockActivity().getSupportActionBar() 
      .getThemedContext()); 
    ArrayAdapter<String> spinnerArrayAdapter = new ArrayAdapter<String>(getSherlockActivity() 
      .getSupportActionBar().getThemedContext(), R.layout.sherlock_spinner_dropdown_item, 
      new String[]{"Last 7 days", "Last month", "Last 6 months", "Last year"}); 
    spinnerArrayAdapter.setDropDownViewResource(R.layout.sherlock_spinner_dropdown_item); 
    spinner.setAdapter(spinnerArrayAdapter); 
    spinner.setOnItemSelectedListener(new OnItemSelectedListener() { 
     @Override 
     public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 
      switch (position) { 
        //do stuff 
       } 
     } 
     @Override 
     public void onNothingSelected(AdapterView<?> parent) { 
      //do stuff     
     } 

    }); 

    menu.add(0, 3, 3, "Date Range") 
    .setActionView(spinner).setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); 
0

你指着操作欄,而不是在類的一個ArrayAdapter背景下你在目前的寫作方法。

ArrayAdapter<String> spinnerArrayAdapter = new ArrayAdapter<String>(getSherlockActivity() 
     .getSupportActionBar().getThemedContext(), R.layout.sherlock_spinner_item, 
     new String[]{"Last 7 days", "Last month", "Last 6 months", "Last year"}); 

第一個參數大概應該是this代替。也就是說,上面的Spinner應該保持指向操作欄的上下文。

This particular answer is also relevant to compare with even if the question isn't