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();
}
}
我已经为我的项目创建了一些活动,但是在转到一个 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();
}
}