2014-11-07 2 views
1

문제가 해결되었을 때 다른 메뉴가 나타납니다. 문제가있는 모든 항목을 게시하는이 규칙의 규칙을 위반하는지 잘 모르겠습니다. ,하지만 여기에 다시 간다. 내 단편 안에서 액션 바에 아이콘 메뉴를 추가하려고한다. 부모 액션에 액션 바 메뉴가 없다는 것을 알기 때문에, 내 메뉴를 대체하려고하지 않는다. 왜냐하면 나는 DrawerLayout을 사용하여 목록 메뉴를 서랍에 넣었으므로 모든 것이지만 일부 특정 조각에서는 일부 작업 표시 줄 아이콘 메뉴를 표시하고 싶습니다. 게시하기 전에 포럼에서 검색했으나 할 수있는 것보다 찾지 못했습니다. 도와주세요, 무슨 일이 일어나고 있는지 모르겠으니, 나는 두 stepts을 표시하고 다른 사람의 게시물을 읽고 파편에 대한 작업 표시 줄 메뉴를, 심지어 두 가지 differents 조각에서 안드로이드 스튜디오에 의해 만들어진 기본 menu.xml을 사용해 보았습니다 ,하지만 어떤 이유로 메뉴가 프라임에 표시되지 않습니다. gments 작업 표시 줄, 내가 먼저 내 부모 활동에 뭔가를해야한다면 모르겠지만, 여기에 내 코드 활동과 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); 
} 

을 구현하려는

조각 코드, 내가 setHasOptionMenu (사실)를 호출; 마지막 라인에서 onCreat()를 호출하고 onCreateOptionMenu()를 사용하여 menu.xml을 부 풀리지 만 어쨌든 아무 것도 표시하지 않습니다. 어떻게되는지에 대해 잘 모르겠습니다. 어쨌든 작동하지 않습니다.

정말 고맙습니다. 문제가 빨리 드러나면 미안 해요, 초보자입니다. 메소드 오버라이드 및 콜링에 대해 많은 것을 이해하지 못합니다.

답변

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

.

+0

완벽하게 @Romadja, 내가 당신과 함께 일할 수있어, 어쨌든, 고마워, 그건 이상한 일이야. 내가 리소스 메뉴 .xml 파일을 부 풀릴 때 작동하지 않는다. 누군가가 오류를 본다면, 이 사실을 알고 계시다면 왜 그것이 정확히 작동하지 않는지 이해하고 싶습니다. 의견을 주신 모든 분들께 진심으로 감사드립니다. – MaToXz

+0

정확히 ... 그 작업 ... 메뉴에 동적 레이아웃을 포함 시키도록 도와주세요 ... (검색 레이아웃과 마찬가지로) – ranjith