2016-08-23 74 views
0

我有以下菜單:菜單項onClickListener的片段

<menu xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
tools:context=".MainActivity"> 

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

<item android:id="@+id/menu_share" 
    android:icon="@drawable/ic_heart_outline_white_24dp" 
    app:showAsAction="always" 
    android:title="Favorite" /> 
</menu> 

我將如何設置一個onClick監聽器呢?銘記我的類擴展片段:

public class My_Profile extends Fragment implements ....{} 

...我不知道這有什麼差別,但我已經在膨脹這個Java文件中的佈局了。

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

myView = inflater.inflate(R.layout.testFragment, container, false); 
... 
} 

更新1

這是我的建議後,嘗試,但好像沒有什麼改變可有人告訴我做什麼我錯了:

@Override 
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 
     inflater.inflate(R.menu.menu_main, menu); 
     super.onCreateOptionsMenu(menu, inflater); 
    } 


@Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     int id = item.getItemId(); 

     if (id == R.id.menu_share) { 
      Log.d("ButtonClick", "button click worked"); 
     } 

     return super.onOptionsItemSelected(item); 
    } 

,並在OnCreate添加此:

setHasOptionsMenu(true); 

更新2

不知道這是否有什麼區別,我只是在做一個例子,目前菜單也是這樣膨脹的。我不知道如果影響其他2種方法:

mToolbar.inflateMenu(R.menu.menu_main); 

更新3

現在,這是我嘗試過呢,還是按一下按鈕不會記錄:

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

     setHasOptionsMenu(true); 

     myView = inflater.inflate(R.layout.testFragment, container, false); 

     ... 

     return myView; 
     } 

只是爲了測試重定向到我的其他活動之一,但仍然沒有發生:

@Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     int id = item.getItemId(); 

     if (id == R.id.menu_share) { 
      Intent myIntent = new Intent(getActivity(),LoginActivity.class); 
      startActivity(myIntent); 
     }else{ 
      Intent myIntent = new Intent(getActivity(),SignupActivity.class); 
      startActivity(myIntent); 
     } 

     return super.onOptionsItemSelected(item); 
    } 


    @Override 
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 
     super.onCreateOptionsMenu(menu, inflater); 
     inflater.inflate(R.menu.menu_main, menu); 
    } 
+0

誰能幫助?沒有方法解決工作至今 – BadCodersHub

回答

0

你的片段應該有這兩種方法來處理菜單:onCreateOptionsMenuonOptionsItemSelected與onClick的東西在後者。

例如:

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    int id = item.getItemId(); 

    if (id == R.id.action_settings) { 
     //TODO 
    } else if (id == R.id.menu_share) { 
     //TODO 
    } 

    return super.onOptionsItemSelected(item); 
} 

編輯

不要忘記setHasOptionsMenu(true)您的片段(感謝)

+0

你忘了提,你需要調用'setHasOptionsMenu(真);'在該片段中的'onCreate'或'onCreateView'功能。 – lionscribe

+0

@lionscribe我使用Google,發現setHasOptionsMenu屬性,但仍然沒有做任何事情。 – BadCodersHub

+0

您還可以覆蓋'onCreateOptionsMenu'方法,以及膨脹的菜單。然後,處理在'onOptionsItemSelected' – lionscribe

0

嗯,我認爲你有一個很好的代碼。 所有你需要做的是重新安排onCreateOptionsMenu(...)

例如:

@Nullable 
@Override 
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
    setHasOptionsMenu(true); 
    return inflater.inflate(R.layout.testFragment, container, false); 
} 

@Override 
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 
    super.onCreateOptionsMenu(menu, inflater); 
    inflater.inflate(R.menu.menu_main, menu); 
} 

我希望這有助於。

+0

請看看我的更新後 – BadCodersHub

+0

我認爲你不需要調用'mToolbar.inflateMenu(R.menu.menu_main)菜單; '因爲菜單已經膨脹'onCreateOptionsMenu(菜單菜單,MenuInflater吹氣)' –

0

@BadCodersHub我已經嘗試過你的場景,它的工作正常,下面的代碼。

@Nullable 
@Override 
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
    setHasOptionsMenu(true); 
    View myView = inflater.inflate(R.layout.fragment_main, container, false); 
    return myView; 
} 

@Override 
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 
    super.onCreateOptionsMenu(menu,inflater); 
    inflater.inflate(R.menu.menu_main, menu); 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()){ 
     case R.id.action_settings: 
      Log.d("","action Settings Clicked !!"); 
      break; 
     case R.id.menu_share: 
      Log.d("","action menu_share Clicked !!"); 
      break; 
     default: 
      return super.onOptionsItemSelected(item); 
    } 

    return super.onOptionsItemSelected(item); 
} 

希望這會對你有幫助。你需要重寫onCreateOptionMenu和onOptionItemSelected方法

+0

我想你的建議,並點擊一個按鈕,當它沒有工作沒有日誌。我做充氣菜單中的onCreate工具欄太否則我看不到菜單mToolbar.inflateMenu(R.menu.menu_main);這會有所作爲嗎? – BadCodersHub