代码之家  ›  专栏  ›  技术社区  ›  mvasco

活动不是从片段内部启动的

  •  -1
  • mvasco  · 技术社区  · 6 年前

    我有一个有两个按钮的碎片。我已经实施了 view.OnclickListener 方法和集合 onclickistener 在两个按钮上:

        btn_password = (ImageButton) v.findViewById(R.id.btn_password);
        btnEditar = (Button) v.findViewById(R.id.btnEditar);
    
        btn_password.setOnClickListener(this);
        btnEditar.setOnClickListener(this);
    

    然后我执行了 onclick 方法:

      @Override
        public void onClick(View view) {
            Fragment fragment = null;
            switch (view.getId()) {
                case R.id.btnEditar:
    
    
                    registerUser(empresa,nombre,direccion,cif,tel,cuenta,id );
                    break;
    
                case R.id.btn_password:
    
                    Log.d(TAG, "Register Response: id" + "clicked Change Password" );
                    Intent intent1 = new Intent(getActivity(), CambiarPasswordActivity.class);
                    startActivity(intent1);
                    break;
    
    
    
            }
        }
    

    去检查一下 btn_password 点击,我已经包含一个日志,确认按钮被点击。

    我的问题是,目的不是启动活动,而是打开 MainActivity 它是保存当前片段的活动。

    欢迎任何帮助

    编辑

    CambiarPasswordActivity代码

    public class CambiarPasswordActivity extends AppCompatActivity {
    
        private static final String URL = "https://.../update_password.php";
        public static final String USERNAME = "username";
        public static final String USERID = "unique_id";
    
        private String user_uid,pass, pass2,usuario;
        ProgressDialog progreso;
    private TextView userName;
        private SQLiteHandler db;
        private SessionManager session;
        private ProgressDialog loading;
        private EditText password, password2;
        public static String MISDATOS= "MisDatos";
        private Button button;
    
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_cambiar_password);
            Log.d("CAMBIAR", "Register Response: id" + "clicked Change Password ESTOY EN CAMBIAR PASSWORD" );
            password=(EditText) findViewById(R.id.password);
            password2=(EditText) findViewById(R.id.password2);
            button = (Button) findViewById(R.id.button);
    
            button.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    pass = password.getText().toString().trim();
                    pass2 = password2.getText().toString().trim();
                    SharedPreferences prefs2 =
                            getSharedPreferences(MISDATOS, Context.MODE_PRIVATE);
    
    
    
    
    
                    usuario = prefs2.getString("ID", "por_defecto@email.com");
    
                    if(TextUtils.isEmpty(pass) || pass.length() < 6)
                    {
                        Toast.makeText(getApplicationContext(),
                                "Password too short, at least 6 characters!", Toast.LENGTH_LONG)
                                .show();
                        return;
                    }
                    if(TextUtils.isEmpty(pass2) || pass2.length() < 6)
                    {
                        Toast.makeText(getApplicationContext(),
                                "Password too short, at least 6 characters!", Toast.LENGTH_LONG)
                                .show();
                        return;
                    }
    
                    if (pass.equals(pass2) ){
                        Log.d("datis","CAMBIO "+pass+" "+usuario);
                        SendData();
                    }
                    else{
                        Toast.makeText(CambiarPasswordActivity.this,"Passwords don´t match",Toast.LENGTH_LONG).show();
                    }
    
                }
            });
    
            // SqLite database handler
            db = new SQLiteHandler(getApplicationContext());
    
            // session manager
            session = new SessionManager(getApplicationContext());
    
            if (!session.isLoggedIn()) {
                logoutUser();
            }
    
    
    
    
    
    
        }
    
    
    
    
    
        private void logoutUser() {
            session.setLogin(false);
    
            db.deleteUsers();
    
            // Launching the login activity
            Intent intent = new Intent(CambiarPasswordActivity.this, LoginActivity.class);
            startActivity(intent);
            //finish();
        }
        public void SendData()
        {
    
            progreso = ProgressDialog.show(this, "Changing Password",
                    "Please, wait...", true);
    
    
            StringRequest stringRequest = new StringRequest(Request.Method.POST, URL,
                    new Response.Listener<String>() {
                        @Override
                        public void onResponse(String response) {
                            System.out.println(response);
                            Log.d("datis","CAMBIO "+response);
                            Toast.makeText(CambiarPasswordActivity.this,response,Toast.LENGTH_LONG).show();
                            progreso.dismiss();
                            Intent intent = new Intent(CambiarPasswordActivity.this,
                                    MainActivity.class);
                            startActivity(intent);
                        }
                    },
                    new Response.ErrorListener() {
                        @Override
                        public void onErrorResponse(VolleyError error) {
                            Toast.makeText(CambiarPasswordActivity.this,error.toString(),Toast.LENGTH_LONG).show();
                        }
                    }){
                @Override
                protected Map<String,String> getParams(){
                    Map<String,String> params = new HashMap<String, String>();
                    params.put("password",pass);
                    params.put("usuario", usuario);
                    return params;
                }
    
            };
    
            RequestQueue requestQueue = Volley.newRequestQueue(this);
            requestQueue.add(stringRequest);
        }
    
    }
    
    3 回复  |  直到 6 年前
        1
  •  1
  •   Sukhbir    6 年前

    所以实际问题是

     if (!session.isLoggedIn()) {
            logoutUser();
        }
    

    你的 logoutUser() 方法正在执行,因为 session.isLoggedIn() 返回

    false . 如上所述 if 条件是满足的并且来自 注销用户() 你是 Launching Intent 对于 LoginActivity .

    这就成了问题, 所以你需要处理 session.isloggedin()。 根据您的要求。

    谢谢

        2
  •  2
  •   Sagar Bhagwat    6 年前

    试试这个。

    @Override
        public void onClick(View view) {
            Fragment fragment = null;
            switch (view.getId()) {
                case R.id.btnEditar:
    
    
                    registerUser(empresa,nombre,direccion,cif,tel,cuenta,id );
                    break;
    
                case R.id.btn_password:
    
                    Log.d(TAG, "Register Response: id" + "clicked Change Password" );
                    Intent intent1 = new Intent(getActivity(), CambiarPasswordActivity.class);
                    getActivity().startActivity(intent1);
                    break;
    
    
    
            }
        }
    
        3
  •  0
  •   Hatchi Roku    6 年前

    试试这个:

    1. 在保存片段的活动中( MainActivity )创建一个启动 CambiarPasswordActivity ,并成功 public .

    主活动.class

    public void launchCambiarPasswordActivity(){
        startActivity(new Intent(this, CambiarPasswordActivity.class));
    }
    

    2。并从片段中调用此方法:

    你的碎片.class

    @Override
    public void onClick(View view) {
        Fragment fragment = null;
        switch (view.getId()) {
            case R.id.btnEditar:
                registerUser(empresa,nombre,direccion,cif,tel,cuenta,id );
                break;
            case R.id.btn_password:
                Log.d(TAG, "Register Response: id" + "clicked Change Password" );
                // Call the new method.
                ((MainActivity) getActivity()).launchCambiarPasswordActivity();
                break;
        }
    }