操作栏片段上的图标菜单问题

时间:2014-11-07 14:43:20

标签: android android-fragments menu android-actionbar

好吧,当我解决了一个问题时,另一个人正在那里,而且我不知道我是否违反了这个论坛的任何规则,发布了我遇到的所有问题,我希望不是,但是这里我再去一次,我试图在我的片段中的操作栏中添加一个图标菜单,在我的父项活动中我不知道有操作栏菜单,所以我不想尝试更换我的片段上的菜单,因为我只是使用DrawerLayout来抽取列表菜单而且它全部,但在某些特定片段中我想显示一些操作栏图标菜单,我在发布之前在论坛中搜索但是我找不到能帮助我的东西,因为我不确定发生了什么,我做了两个步骤显示和操作栏菜单上的其他帖子读取的片段,我甚至试过使用android studio创建的默认menu.xml,在两个不同的片段中,但由于某种原因菜单没有显示在片段上的动作栏,我不确定我是否必须在我的父Activity上做一些事情f irst,但这里是我的代码Activity和Fragmen

父活动代码,声明为DrawerLayout菜单列表

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);
}

}

我要实现操作栏菜单的片段代码

import android.app.Activity;
import android.net.Uri;
import android.os.Bundle;
import android.app.Fragment;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import android.widget.ToggleButton;

public class customerFragment extends Fragment {

private static final String ARG_PARAM1 = "param1";
private static final String ARG_PARAM2 = "param2";

private String mParam1;
private String mParam2;

private OnFragmentInteractionListener mListener;

public static customerFragment newInstance(String param1, String param2) {
    customerFragment fragment = new customerFragment();
    Bundle args = new Bundle();
    args.putString(ARG_PARAM1, param1);
    args.putString(ARG_PARAM2, param2);
    fragment.setArguments(args);
    return fragment;
}
public customerFragment() {
    // Required empty public constructor
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setHasOptionsMenu(true);
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_customer, container, false);
    // Inflate the layout for this fragment
    return view;
}

// TODO: Rename method, update argument and hook method into UI event
public void onButtonPressed(Uri uri) {
    if (mListener != null) {
        mListener.onFragmentInteraction(uri);
    }
}

@Override
public void onAttach(Activity activity) {
    super.onAttach(activity);
    try {
        //mListener = (OnFragmentInteractionListener) activity;
    } catch (ClassCastException e) {
        throw new ClassCastException(activity.toString()
                + " must implement OnFragmentInteractionListener");
    }
}

@Override
public void onDetach() {
    super.onDetach();
    mListener = null;
}

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

public interface OnFragmentInteractionListener {
    // TODO: Update argument type and name
    public void onFragmentInteraction(Uri uri);
}

正如你在Fragment Code上看到的那样,我调用了setHasOptionMenu(true); whithin onCreat()在最后一行,我在onCreateOptionMenu()中膨胀我的menu.xml,但是我没有显示任何东西,我不确定发生了什么,为什么它没有#&# 39;无论如何都要工作。

事先非常感谢,如果问题很明显,我很抱歉,我还是初学者,而且我不了解方法重写和调用的很多内容。

1 个答案:

答案 0 :(得分:3)

如果您尝试以编程方式而不是inflater.inflate(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);
}

那为我工作。

相关问题