Android 碎片上的操作栏图标菜单问题
就在我解决了一个问题的时候,另一个问题正在出现,我不知道我是否违反了这个论坛的任何规则,发布了我遇到的所有问题,我希望不会,但我又来了,我试图在我的片段中的动作栏中添加一个图标菜单,在我的父活动中,我不知道是否有动作栏菜单,所以我不想替换我片段上的菜单,因为我只是使用抽屉布局来绘制一个列表菜单,仅此而已,但在一些特定片段中,我想显示一些动作栏图标菜单,我在发布之前在论坛中搜索过,但我没有找到可以帮助我的东西,因为我不确定发生了什么,我做了两个步骤,在别人的帖子上读到的片段上显示和操作栏菜单,我甚至尝试在两个不同的片段中使用android studio创建的default menu.xml,但由于某些原因,菜单没有显示在片段操作栏上,我不确定我是否必须首先对我的父活动执行某些操作,但这里是我的代码活动和Fragmen 父活动代码,在抽屉布局菜单列表中声明Android 碎片上的操作栏图标菜单问题,android,android-fragments,menu,android-actionbar,Android,Android Fragments,Menu,Android Actionbar,就在我解决了一个问题的时候,另一个问题正在出现,我不知道我是否违反了这个论坛的任何规则,发布了我遇到的所有问题,我希望不会,但我又来了,我试图在我的片段中的动作栏中添加一个图标菜单,在我的父活动中,我不知道是否有动作栏菜单,所以我不想替换我片段上的菜单,因为我只是使用抽屉布局来绘制一个列表菜单,仅此而已,但在一些特定片段中,我想显示一些动作栏图标菜单,我在发布之前在论坛中搜索过,但我没有找到可以帮助我的东西,因为我不确定发生了什么,我做了两个步骤,在别人的帖子上读到的片段上显示和操作栏菜单,我甚
import java.util.ArrayList
import android.app.Activity;
import android.app.Fragment;
import android.app.FragmentManager;
import android.content.res.Configuration;
import android.content.res.TypedArray;
import android.os.Bundle;
import android.support.v4.app.ActionBarDrawerToggle;
import android.support.v4.widget.DrawerLayout;
import android.util.Log;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.Toast;
public class MainActivity extends Activity {
private String[] titulos;
private DrawerLayout NavDrawerLayout;
private ListView NavList;
private ArrayList<Item_objct> NavItms;
private TypedArray NavIcons;
private ActionBarDrawerToggle mDrawerToggle;
private CharSequence mDrawerTitle;
private CharSequence mTitle;
Fragment ventas;
NavigationAdapter NavAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity__main);
NavDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
NavList = (ListView) findViewById(R.id.lista);
View header = getLayoutInflater().inflate(R.layout.header, null);
NavList.addHeaderView(header);
NavIcons = getResources().obtainTypedArray(R.array.navigation_iconos);
titulos = getResources().getStringArray(R.array.nav_options);
NavItms = new ArrayList<Item_objct>();
NavItms.add(new Item_objct(titulos[0], NavIcons.getResourceId(0, -1)));
NavItms.add(new Item_objct(titulos[1], NavIcons.getResourceId(1, -1)));
NavItms.add(new Item_objct(titulos[2], NavIcons.getResourceId(2, -1)));
NavItms.add(new Item_objct(titulos[3], NavIcons.getResourceId(3, -1)));
NavItms.add(new Item_objct(titulos[4], NavIcons.getResourceId(4, -1)));
NavItms.add(new Item_objct(titulos[5], NavIcons.getResourceId(5, -1)));
NavAdapter= new NavigationAdapter(this,NavItms);
NavList.setAdapter(NavAdapter);
mTitle = mDrawerTitle = getTitle();
mDrawerToggle = new ActionBarDrawerToggle(
this, /* host Activity */
NavDrawerLayout, /* DrawerLayout object */
R.drawable.ic_drawer, /* Icono de navegacion*/
R.string.app_name, /* "open drawer" description */
R.string.hello_world /* "close drawer" description */
) {
/** Called when a drawer has settled in a completely closed state. */
public void onDrawerClosed(View view) {
Log.e("Cerrado completo", "!!");
}
/** Called when a drawer has settled in a completely open state. */
public void onDrawerOpened(View drawerView) {
Log.e("Apertura completa", "!!");
}
};
NavDrawerLayout.setDrawerListener(mDrawerToggle);
getActionBar().setDisplayHomeAsUpEnabled(true);
getActionBar().setHomeButtonEnabled(true);
NavList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int position, long id) {
MostrarFragment(position);
}
});
ventas = new VentasFragment();
}
private void MostrarFragment(int position) {
Fragment fragment = null;
switch (position) {
case 0:
//fragment = new HomeFragment();
break;
case 1:
fragment = ventas;
break;
case 4:
fragment = new customerFragment();
break;
default:
//si no esta la opcion mostrara un toast y nos mandara a Home
Toast.makeText(getApplicationContext(),"Opcion "+titulos[position-1]+"no disponible!", Toast.LENGTH_SHORT).show();
// fragment = new HomeFragment();
position=1;
break;
}
if (fragment != null) {
FragmentManager fragmentManager = getFragmentManager();
fragmentManager.beginTransaction().replace(R.id.content_frame, fragment).commit();
NavList.setItemChecked(position, true);
NavList.setSelection(position);
if(position > 0)
setTitle(titulos[position-1]);
else
setTitle("Balance General");
NavDrawerLayout.closeDrawer(NavList);
} else {
Log.e("Error ", "MostrarFragment"+position);
}
}
@Override
protected void onPostCreate(Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
// Sync the toggle state after onRestoreInstanceState has occurred.
mDrawerToggle.syncState();
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
mDrawerToggle.onConfigurationChanged(newConfig);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Pass the event to ActionBarDrawerToggle, if it returns
// true, then it has handled the app icon touch event
if (mDrawerToggle.onOptionsItemSelected(item)) {
Log.e("mDrawerToggle pushed", "x");
return true;
}
// Handle your other action bar items...
return super.onOptionsItemSelected(item);
}
正如您在片段代码中看到的,我调用setHasOptionMenu(true);whithin onCreate()在最后一行,我膨胀了我的menu.xml whithin onCreateOptionMenu(),但我没有显示任何内容,我不太确定到底发生了什么,为什么它不起作用
在此之前,非常感谢您,如果问题很快变得明显,我很抱歉,我还是初学者,不太了解方法重写和调用的很多内容。如果您尝试以编程方式添加项,而不是
充气器。充气(R.menu.main,menu)
,例如:
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
menu.add(0, R.id.your_id, 0,
getResources().getString(R.string.your_string))
.setIcon(R.drawable.your_icon)
.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
}
这对我来说很有效。Perfect@Romadja,我让它与你一起工作示例,非常感谢你,无论如何,当我膨胀我的resource menu.xml文件时,它不工作的原因有点奇怪,如果有人看到错误,请注意这一点,我真的想理解它为什么不工作。非常感谢大家的评论。事实上,它很有效。。。请帮助我将actionLayout动态添加到菜单中。。。(类似于搜索布局)
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
menu.add(0, R.id.your_id, 0,
getResources().getString(R.string.your_string))
.setIcon(R.drawable.your_icon)
.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
}