onBackPressed 不返回上一个 activity

onBackPressed not going back to previous activity

我已经为我的项目创建了一些活动,但是在转到一个 activity 到另一个

时我遇到了一些问题
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_transaksibaru);
        getSupportActionBar().show();
        getSupportActionBar().setHomeButtonEnabled(true);
        getSupportActionBar().setDefaultDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);

        radioGroup = (RadioGroup) findViewById(R.id.editJenis);
        KeteranganTrx = (EditText)findViewById(R.id.editKeterangan);
        JumlahTrx = (EditText)findViewById(R.id.editJumlah);
        JumlahTrx.addTextChangedListener(onTextChangedListener());

        SubmitTransaksi = (TextView) findViewById(R.id.buttonSubmit);

        SubmitTransaksi.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                // Checking whether EditText is Empty or Not
                CheckEditTextIsEmptyOrNot();
                if(CheckEditText){
                    // If EditText is not empty and CheckEditText = True then this block will execute.
                    ProsesTransaksi(JenisTrxHolder,KeteranganTrxHolder, JumlahTrxHolder);
                }
                else {
                    // If EditText is empty then this block will execute .
                    Toast.makeText(TransaksiBaru.this,"Pastikan Semua Kolom Terisi", Toast.LENGTH_SHORT).show();
                }
            }
        });

    }

    private TextWatcher onTextChangedListener() {
        return new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
            }

            @Override
            public void afterTextChanged(Editable s) {
                JumlahTrx.removeTextChangedListener(this);

                try {
                    String originalString = s.toString();
                    Long longval;
                    if (originalString.contains(",")) {
                        originalString = originalString.replaceAll(",", "");
                    }
                    longval = Long.parseLong(originalString);
                    DecimalFormat formatter = (DecimalFormat) NumberFormat.getInstance(Locale.US);
                    formatter.applyPattern("#,###,###,###");
                    String formattedString = formatter.format(longval);
                    //setting text after format to EditText
                    JumlahTrx.setText(formattedString);
                    JumlahTrx.setSelection(JumlahTrx.getText().length());
                } catch (NumberFormatException nfe) {
                    nfe.printStackTrace();
                }
                JumlahTrx.addTextChangedListener(this);
            }
        };
    }

    public void ProsesTransaksi(final String S_Jenis, final String S_Keterangan, final String S_Jumlah){
        class ProsesTransaksiClass extends AsyncTask<String,Void,String> {

            @Override
            protected void onPreExecute() {
                super.onPreExecute();
                progressDialog = ProgressDialog.show(TransaksiBaru.this,"Loading Data",null,true,true);
            }

            @Override
            protected void onPostExecute(String httpResponseMsg) {
                super.onPostExecute(httpResponseMsg);
                progressDialog.dismiss();
                if(httpResponseMsg.equalsIgnoreCase("Transaksi berhasil di simpan")){
                    Toast.makeText(TransaksiBaru.this,httpResponseMsg.toString(), Toast.LENGTH_SHORT).show();
                    finish();
                    Intent IntentDashboard = new Intent(getApplicationContext(),UserDashboard.class);
                    startActivity(IntentDashboard);
                }
                else{
                    Toast.makeText(TransaksiBaru.this,httpResponseMsg.toString(), Toast.LENGTH_SHORT).show();
                }
            }

            @Override
            protected String doInBackground(String... params) {
                hashMap.put("JenisTrx",params[0]);
                hashMap.put("KeteranganTrx",params[1]);
                String a = params[2];
                a=a.replaceAll(",","");
                hashMap.put("JumlahTrx",a);
                finalResult = httpParse.postRequest(hashMap, HttpURL);
                return finalResult;
            }
        }

        ProsesTransaksiClass prosesTransaksiClass = new ProsesTransaksiClass();
        prosesTransaksiClass.execute(S_Jenis,S_Keterangan,S_Jumlah);
    }

    public void CheckEditTextIsEmptyOrNot(){
        int selectedId = radioGroup.getCheckedRadioButtonId();
        JenisTrx = (RadioButton) findViewById(selectedId);
        JenisTrxHolder = JenisTrx.getText().toString();
        KeteranganTrxHolder = KeteranganTrx.getText().toString();
        JumlahTrxHolder = JumlahTrx.getText().toString();

        if(TextUtils.isEmpty(JenisTrxHolder) || TextUtils.isEmpty(KeteranganTrxHolder) || TextUtils.isEmpty(JumlahTrxHolder))
        {
            CheckEditText = false;
        }
        else {
            CheckEditText = true ;
        }

    }

    @Override
    public void onBackPressed()
    {
        this.finish();
    }
}

当我在我的设备上按返回键时,它直接关闭了应用程序。我想要的是当我在我的设备中按回键时它会回到之前的 activity。如何检测是否有之前的 activity 然后返回到之前的 activity.

对此有什么帮助吗?

你可以试试这个

@Override
public void onBackPressed()
{
  super.onBackPressed();
}

而不是这个

@Override
public void onBackPressed()
{
    this.finish();
}

您可以使用 finish()finishAffinity() 来结束 activity

@Override
public void onBackPressed() {
   finishAffinity();
}

如果您使用 Intent 它可能有效,例如:

public void onBackPressed() {
        Intent gotoBack = new Intent(YourActualActivity.this, YourDestiny.class);
        //gotoBack.putExtra(USER_GLOBAL_SENDER, username_global); <-- Use this if you want to carry some data to the other activity.
        startActivity(gotoBack);
}

希望对您有所帮助。

在之前的活动中,你可能调用了finish()before/afterstartActivity(intent),我建议你去掉那里的finish()方法调用。

例如:

从 Activity A -> Activity B

你打电话

Intent intent = new Intent(A.this, B.class);
startActivity(intent);
finish();

现在在 Activity B 中,你按下 BackButton,它会关闭应用程序,因为后台堆栈中没有 activity 来重新获得焦点/恢复

要解决此问题,只需删除 Activity 中的 finish() 方法,您可以在其中进行意向调用,例如:

Intent intent = new Intent(A.this, B.class);
startActivity(intent);
// finish();    // Note: finish() is commented

现在,当您在 Activity B 中按下返回按钮时,它将恢复 Activity A

注意:确保您在 Activity B 中的 onBackPressed() 中调用 finish();这表明您不再需要这个 Activity(Activity B) 并且可以恢复最后一个 activity ,它是 paused/stopped 并且在后台堆栈

删除

@Override
public void onBackPressed()
{
    this.finish();
}

它应该可以正常工作。

我认为你在 activity 之前是你所谓的意图时间已经完成所以这个 activity 完成然后不去上一个。

@Override
public void onBackPressed()
{ 
    startActivity(new Intent(TransaksiBaru.this,backActivity.class));
    this.finish();
}
@Override
 protected void onPostExecute(String httpResponseMsg) {
 super.onPostExecute(httpResponseMsg);

 progressDialog.dismiss();
 if(httpResponseMsg.equalsIgnoreCase("Transaksi berhasil di simpan")){

   Toast.makeText(TransaksiBaru.this,httpResponseMsg.toString(), 
   Toast.LENGTH_SHORT).show();
   finish();// Remove this line from your asynctask.
   Intent IntentDashboard = new Intent(getApplicationContext(),UserDashboard.class);
               startActivity(IntentDashboard);
            } else {
             Toast.makeText(TransaksiBaru.this,httpResponseMsg.toString(), 
Toast.LENGTH_SHORT).show();
            }
        }