web-dev-qa-db-fra.com

Android: startActivityForResult & setResult pour une classe de vue et une classe d'activité

Je suis confus et je n'ai aucune idée de la façon d'utiliser les startActivityResults et setResults pour obtenir des données de l'activité précédente. J'ai une classe de vue et une classe d'activité.

Fondamentalement, dans ma classe de vue, j'ai cette boîte de dialogue et elle démarre réellement la classe d'activité appelée la classe colorActivity. Lorsque l'utilisateur sélectionne oui également, il transmet le nom du cercle sélectionné à la classe colorActivity. À la classe colorActivity, les utilisateurs sont autorisés à entrer le code de couleur pour un cercle particulier et je voudrais transmettre le code de couleur à la classe de vue. J'ai des problèmes pour transmettre des valeurs de l'activité vers la vue à l'aide de la méthode startActivityForResult et setResult. En plus, comment utiliser les données récupérées après cela?

mon code est le suivant

Code Ontouchevent de ma classe view:

            @Override
            public boolean onTouchEvent(MotionEvent event) {

                x = event.getX();
                y = event.getY();


                switch (event.getAction()) {
                case MotionEvent.ACTION_DOWN:


                    for (int i = 0; i < circles.size(); i++) {


                        if (circles.get(i).contains(x, y)) {
                            circleID = i;

            Handler handler = new Handler();
                                handler.postDelayed(new Runnable() {
                                    @Override
                                    public void run() {
                                        AlertDialog.Builder builder = new Builder(
                                                getContext());
                                        final EditText text = new EditText(getContext());

                                        builder.setTitle("Adding colors to circles").setMessage(
                                                "Proceed to Enter color");
                                        builder.setPositiveButton("Yes",
                                                new DialogInterface.OnClickListener() {

                                                    public void onClick(DialogInterface di,
                                                            int i) {

                                                        Intent intent = new Intent(
                                                                getContext(),
                                                                colorActivity.class);

                                                         intent.putExtra("circlename", circleNameList.get(circleID));


    startActivityForResults(intent, 1); // error incurred here : The method startActivityForResult(Intent, int) is undefined for the type new DialogInterface.OnClickListener(){}
                                                    }

                                                });
                                        builder.setNegativeButton("No",
                                                new DialogInterface.OnClickListener() {

                                                    public void onClick(DialogInterface di,
                                                            int i) {
                                                    }

                                                });

                                        builder.create().show();
                                    }
                                }, 3000);
    break;

    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == 1) { // Please, use a final int instead of hardcoded
                                // int value
            if (resultCode == RESULT_OK) {
                 ccode = (String) data.getExtras().getString("colorcode");
        }

        }
    }

public static String getColorCode() {
        return ccode;
    }

Dans la colorActivity:

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.add_ecolor);


        circlenametextview = (TextView)findViewById(R.id.circlenametextview);


        String circlename = super.getIntent().getStringExtra("circlename");
          circlenametextview.setText(circlename);//get the circle name


savebutton.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {

                 Intent intent = new Intent(colorActivity.this, ?????);//how to return back to the view class?


               colorcode = colorEditText.getText().toString();// I am able to get value right up till this point
              Intent resultIntent = new Intent();
                   resultIntent.putExtra("colorcode", colorcode );

                   setResult(Activity.RESULT_OK, resultIntent);
                   finish();
            }// onclick

        });
        }
18
user3306996

Après avoir corrigé l'autre code pour pouvoir exécuter le programme, vous pouvez récupérer les paramètres de votre activité colorActivity de cette manière:

Étape 1: renvoyer une valeur de colorActivity

Intent resultIntent = new Intent();
resultIntent.putExtra("NAME OF THE PARAMETER", valueOfParameter);
...
setResult(Activity.RESULT_OK, resultIntent);
finish();

Étape 2: collecter des données de l'activité principale

Substitution de @onActivityResult(...).

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == 1) { // Please, use a final int instead of hardcoded int value
    if (resultCode == RESULT_OK) {
        String value = (String) data.getExtras().getString("NAME OF THE PARAMETER");

Références

47
donnadulcinea

essayez d'utiliser

ActivityName.this.startActivityForResult(intent,int)

Oh, et 1 petite chose, dans votre code que vous avez utilisé

startActivityForResults (intention, int) ..remplacez cela par

startActivityForResult (intention, int)

2
J.Ajendra