2016-08-23 72 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