繁体   English   中英

选择特定片段后如何隐藏导航抽屉“菜单”?

[英]How to hide navigation drawer `menuitems` when particular fragment is selected?

这是登录片段:

public class Login extends Fragment {

    TextInputEditText u_name,u_pass;
    String name_user,password_user;
    Button login_btn;
    TextView user_register;
    String PREF="myData";
    SharedPreferences preferences;
    SharedPreferences.Editor editor;
    NavigationView navigationView;


    public Login() {
        // Required empty public constructor
    }


    @Override
    public View onCreateView(final LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment

        View view= inflater.inflate(R.layout.fragment_login, container, false);
        u_name=(TextInputEditText) view.findViewById(R.id.user_name);
        u_pass=(TextInputEditText) view.findViewById(R.id.user_password);
        login_btn=(Button) view.findViewById(R.id.submit_btn);
        user_register=(TextView) view.findViewById(R.id.register_user);

        //setting up navigationview text and image

        navigationView=(NavigationView) view.findViewById(R.id.nav_view);

        navigationView.setNavigationItemSelectedListener(this);

        login_btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                name_user=u_name.getText().toString().trim();
                password_user=u_pass.getText().toString();

                if (name_user.isEmpty())
                {
                    u_name.setError("Enter email address");
                }
                else if (password_user.isEmpty())
                {
                    u_pass.setError("Enter password");
                }
                else
                {
                    loginUser();
                }

            }
        });

        user_register.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                FragmentManager fragmentManager=getFragmentManager();
                FragmentTransaction fragmentTransaction=fragmentManager.beginTransaction();
                fragmentTransaction.replace(R.id.containerView,new RegisterUser()).addToBackStack(null).commit();

            }
        });
        return view;
    }

    private void loginUser()
    {
        final ProgressDialog pd=ProgressDialog.show(getActivity(),"Login","Please wait",false);
        StringRequest loginRequest=new StringRequest(Request.Method.POST, "http://mywebdata.com/webservice/logincheck.php", new Response.Listener<String>() {
            @Override
            public void onResponse(String response) {

                pd.dismiss();
                //Toast.makeText(getActivity(), ""+response, Toast.LENGTH_LONG).show();
                if (response.contains("Invalid Email Address and Password"))
                {
                    Toast.makeText(getActivity(), "Invalid Email Address and Password", Toast.LENGTH_SHORT).show();
                }
                else
                {
                    getLoginUser(response);
                }


                //Log.e("login",""+response);

            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                pd.dismiss();
                Log.e("Error",""+error.toString());
                Toast.makeText(getActivity(), "Network error please try again", Toast.LENGTH_SHORT).show();

            }
        }){
            @Override
            protected Map<String, String> getParams() throws AuthFailureError {
                Map<String,String> map=new HashMap<String, String>();
                map.put("usrname",name_user);
                map.put("passwrd",password_user);
                return map;
            }
        };
        RequestQueue queue= Volley.newRequestQueue(getActivity());
        queue.add(loginRequest);
    }

    private void getLoginUser(String user)
    {
        ParseJson parseJson=new ParseJson(user);
        parseJson.parseUserLogin();

        if (ParseJson.login_mail[0].equals(name_user))
        {
            preferences=getActivity().getSharedPreferences(PREF, Context.MODE_PRIVATE);
            editor=preferences.edit();
            editor.putString("LOGIN_USER",ParseJson.login_id[0]);
            editor.putString("LOGIN NAME",ParseJson.login_name[0]);
            editor.commit();
        }
        else
        {
            Toast.makeText(getActivity(), "Invalid user name,Try again", Toast.LENGTH_SHORT).show();
        }
    }

}

问题是何时调用navigationView.setNavigationItemSelectedListener(this); 它给我一个错误,我不能称这个witihn片段为Login。

谢谢你的时间...

fragment/activity实现以下接口:

NavigationView.OnNavigationItemSelectedListener

oncreate/oncreateView内添加以下代码

navigationView.setNavigationItemSelectedListener(this); 

您执行操作时,您的片段没有实现的'NavigationView.OnNavigationItemSelectedListener'

navigationView.setNavigationItemSelectedListener(this);

这样做

public class Login extends Fragment implements
                                    NavigationView.OnNavigationItemSelectedListener

并重写方法,您就可以开始了

更新:在选定特定片段时隐藏和显示navigationView menuitems

1.)在您的活动中初始化navigationView

2.)内部导航监听器

navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {

   @Override
   public boolean onNavigationItemSelected(MenuItem menuItem) {
      if(menuItem.getItemId()==R.id.login_fragment )  {
           // to hide items  
          navigationView.getMenu().findItem(R.id.item_to_hide).setVisible(false);
           //  to show items
          navigationView.getMenu().findItem(R.id.item_to_show).setVisible(true);
   }   
      return true;
   }
});

其中getMenu()为您提供菜单对象

findItem(id)为您提供隐藏/显示menuitem

setVisibile()会将menuitem的状态修改为可见/不可见

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM