setResult没有在onCheckedChanged方法上工作

时间:2014-10-24 17:37:22

标签: android android-activity togglebutton onactivityresult oncheckedchanged

首先抱歉我的英语不好。

我的问题是当我想从第二个活动中获取结果时,在此活动中我有一个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)

谢谢

0 个答案:

没有答案