首先抱歉我的英语不好。
我的问题是当我想从第二个活动中获取结果时,在此活动中我有一个Switch按钮,当它打开时,我将setResult设置为RESULT_OK,当它关闭时,我将setResult设置为Canceled。因此,当按下按钮进入后台活动时,应用程序会爆炸。
我已经尝试对Switch Listener发表评论,并在完成()方法之前将setResult取消放在按钮监听器中......并且不确定这实际上有效。
我希望Switch Button按照我的意愿行事,但我不知道为什么这样做不起作用。
这是我的代码:
MainActivity:
import android.app.Activity;
import android.app.NotificationManager;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.NotificationCompat;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnLongClickListener;
import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.TextView;
public class MainActivity extends Activity implements OnClickListener,
OnLongClickListener{
Button b_pulsar;
TextView t_numeros, tv_resultado;
ProgressBar pb_pbar;
int num;
NotificationManager mManager;
NotificationCompat.Builder mBuilder;
Intent resultIntent;
String nombre;
int NOTI_SI, NOTI_NO;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
b_pulsar = (Button) findViewById(R.id.b_Pulsar);
t_numeros = (TextView) findViewById(R.id.t_numero);
pb_pbar = (ProgressBar) findViewById(R.id.pb_progress);
tv_resultado = (TextView)findViewById(R.id.tv_resultado);
b_pulsar.setOnClickListener(this);
b_pulsar.setOnLongClickListener(this);
num = 0;
t_numeros.setText(String.valueOf(num));
tv_resultado.setText("");
NOTI_SI = 1;
NOTI_NO = 0;
mBuilder = new NotificationCompat.Builder(this);
mManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
}
public void onSaveInstanceState(Bundle bund) {
super.onSaveInstanceState(bund);
bund.putInt("inc", num);
};
public void onRestoreInstanceState(Bundle bund) {
super.onRestoreInstanceState(bund);
num = bund.getInt("inc");
t_numeros.setText(String.valueOf(num));
};
@Override
public void onClick(View v) {
if (v.getId() == R.id.b_Pulsar) {
num++;
pb_pbar.setProgress(num);
t_numeros.setText(String.valueOf(num));
}
}
@Override
public boolean onLongClick(View v) {
if (v.getId() == R.id.b_Pulsar) {
num = 0;
t_numeros.setText(String.valueOf(num));
pb_pbar.setProgress(num);
resultIntent = new Intent(MainActivity.this,SegundaPantalla.class);
startActivityForResult(resultIntent, 1);
}
return true;
}
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
if(requestCode == 1)
{
if(resultCode == RESULT_OK)
{
nombre = data.getStringExtra("nombre");
mBuilder.setContentTitle(nombre);
mBuilder.setContentText("Has pulsado " + num +" veces");
mManager.notify(1, mBuilder.build());
}
if(resultCode == RESULT_CANCELED)
{
nombre = data.getStringExtra("nombre");
tv_resultado.setText(" has pulsado ");// + num + " veces");
}
}
}
}
活动2中的代码不起作用:
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.EditText;
import android.widget.Switch;
public class SegundaPantalla extends Activity implements OnCheckedChangeListener, OnClickListener{
EditText et_nombre;
Switch sw_notificacion;
Button b_continuar;
int NOTI_SI,NOTI_NO;
Intent returnIntent;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_segunda_pantalla);
et_nombre = (EditText)findViewById(R.id.et_nombre);
sw_notificacion = (Switch)findViewById(R.id.sw_notificacion);
b_continuar = (Button)findViewById(R.id.b_continuar);
b_continuar.setOnClickListener(this);
NOTI_SI = 0;
NOTI_NO = 1;
returnIntent = new Intent();
}
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if(buttonView.getId() == R.id.sw_notificacion)
{
if(isChecked)
{
setResult(RESULT_OK, returnIntent);
}
else
{
setResult(RESULT_CANCELED, returnIntent);
}
}
}
@Override
public void onClick(View v) {
if(v.getId() == R.id.b_continuar)
{
returnIntent.putExtra("nombre", et_nombre.getText());
finish();
}
}
}
我做错了什么?
编辑:我已经把所有的代码。
EDIT2:我想在onClick方法中做一个独特的setResult,并在Switch方法上使用布尔值将一个或其他INT带到该setResult,但我认为它不是唯一的。 ..
EDIT3:好的,我想我遇到了主要的错误。该应用程序不会使OnCheckedChanged方法
解决方案:我应该在onCreate方法中添加sw_notificacion.setOnCheckedChangedListener(this)
。
谢谢