2013-07-05 4 views
0

Я работаю над фрагментом Шерлока и вам нужно добавить некоторые опции в optionMenu. Но не смог этого сделать. Вот мой код ниже. я уже добавил setHasOptionMenu (истинный) в onCreateView: Так что, пожалуйста, посмотрите на этот код ,,, и скажите мне, где я неправильноOptionMenu ничего не показывает в фрагменте Шерлока

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

     progress = menu.add("Progress");// first option 
     progress.setIcon(android.R.id.progress); 
     progress.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); 

     MenuItem add = menu.add("Refresh");// second option 
     add.setIcon(R.drawable.ic_menu_refresh); 
     add.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); 

     MenuItem get = menu.add("Logout");// third option 
     get.setIcon(R.drawable.power); 
     get.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); 



     get.setOnMenuItemClickListener(new OnMenuItemClickListener() 
     { 

      @Override 
      public boolean onMenuItemClick(MenuItem item) 
      { 

       userfunctions = new UserFunctions(); 
         //AsyncTask 
       class AsyncLogout extends AsyncTask<Void, Void, String> { 

        protected String doInBackground(Void... params) { 
         json = userfunctions.logoutUser(userid); 



         try { 
          if (json.getString(KEY_SUCCESS) != "1") { 
           String res = json.getString(KEY_SUCCESS); 

           if (Integer.parseInt(res) == 1) { 
            p_error_msg = "successful"; 

           } 

          } else { 
           p_error_msg = "error"; 

          } 
         } catch (Exception e) { 
          e.printStackTrace(); 
         } 

         return p_error_msg; 
        } 

        protected void onPostExecute(String result) { 
         try { 
          if (result.equals("successful")) { 

           Intent ii = new Intent(getActivity(), 
             HomeActivity.class); 

           SharedPreferences.Editor editor = mPrefs.edit(); 

           editor.putString("login", "0"); 

           editor.remove("PREF_ACCESS_TOKEN_TWITTER"); 
           editor.remove("PREF_ACCESS_TOKEN_SECRET_TWITTER"); 
           editor.remove("PREF_ACCESS_TOKEN_FB"); 
           editor.remove("PREF_ACCESS_TOKEN_SECRET_FB"); 

           editor.commit(); 

           startActivity(ii); 
           getActivity().finish(); 
          } else { 

          } 

         } catch (Exception e) { 

         } 

        } 

        protected void onPreExecute() { 
         super.onPreExecute(); 

        } 
       } 

       AsyncLogout as=new AsyncLogout(); 
       as.execute(); 

       return false; 
      } 
     }); 

     add.setOnMenuItemClickListener(new OnMenuItemClickListener() { 

      @Override 
      public boolean onMenuItemClick(MenuItem item) 
      { 
       Intent i = new Intent(getActivity(), MainActivity.class); 
       SharedPreferences.Editor editor = mPrefs.edit(); 
       editor.putString("login", "1"); 
       editor.putInt("defaultSelector", 2); 
       editor.commit(); 
       startActivity(i); 
       getActivity().finish(); 

       return false; 
      } 
     }); 



} 

ответ

1

Вот правильный способ, как справиться с MenuItems от Fragment:

public class MyFragment extends Fragment { 

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

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

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     super.onOptionsItemSelected(item); 
     switch(item.getItemId()){ 
     case R.id.action_sort: 
       // DO STUFF 
      break; 
     case R.id.action_anytag: 
       // DO STUFF 
      break; 
     } 
     return true; 
    } 
} 

Мое предложение, вместо того чтобы создавать элементы в Java коде, использовать пользовательские menu.xml только для Fragment, надуть его и использовать onOptionsItemSelected() для обработки события нажатия на пункты меню.

+0

Спасибо ,,, его рабочий ,,,,,, Но должен быть способ достичь этой задачи путем кодирования (а не XML) –

Смежные вопросы