1

I have read the previously posted questions and answers for 2 days and I've tried every variation suggested as well as setting my launchMode attribute to "standard" in my manifest.

I'm trying to pass data from my second activity back to my first activity after pressing a button. After I press the button, the first activity is launched but it doesn't go back to my onActivityResult() method. I can't figure out why this is happening.

Here's my code from activity 2:

   Button btnAdd = (Button) findViewById(R.id.btnAdd);
    btnAdd.setOnClickListener(new View.OnClickListener() {

        public void onClick(View v) {

            //Check that message is printed out to LogCat
            System.out.println("hello test1 Activity2");

            EditText band = (EditText) findViewById(R.id.txtBand);
            band.setFilters(new InputFilter[] {
                    new InputFilter.LengthFilter(9)
            });
            EditText album = (EditText) findViewById(R.id.txtAlbum);
            album.setFilters(new InputFilter[] {
                    new InputFilter.LengthFilter(9)
            });
            final Spinner genre = (Spinner) findViewById(R.id.spin_genre);
            TextView selection = (TextView)genre.getSelectedView();

            CharSequence strBand = band.getText();
            CharSequence strAlbum = album.getText();
            CharSequence strGenre = selection.getText();

            //Check that we got input values
            System.out.println("hello test Activity2- " + 
                    strBand + " - " + strAlbum + " - " + strGenre);

            //**********Intent Declaration************  

            Intent i = new Intent(getApplicationContext(), Activity1.class);

            i.putExtra("strBand", strBand);
            i.putExtra("strAlbum", strAlbum);
            i.putExtra("strGenre", strGenre);
            startActivityForResult(i, 0);
            setResult(RESULT_OK, i);
            finish();    

        }
    });

Here's activity 1:

 public class Activity1 extends Activity {
/** Called when the activity is first created. */
@SuppressWarnings("deprecation")
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);


    Button addAlbum = (Button) findViewById(R.id.btnMain);
    addAlbum.setOnClickListener(new View.OnClickListener() {

        public void onClick(View v) {
            Intent i = new Intent();
            i.setClassName("jorge.jorge.jorge",
                    "jorge.jorge.jorge.Activity2");
            startActivity(i);

        }
    });

}// end of onCreate()

    //******************Callback Method****************************
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
    super.onActivityResult(requestCode, resultCode, data);
    //Checks if we got to ActivityResult
    System.out.println("hello test 2: We got to Activity1");

    if (resultCode == RESULT_OK)

    {

        Bundle returndata = data.getExtras();

        String strAlbum = returndata.getString("strAlbum");

        String strBand = returndata.getString("strBand");

        String strGenre = returndata.getString("strGenre");

        // check to see if we got the variable values from activity2
        System.out.println("hello test 2: We got to Activity1 with variables - " 
                + strBand + " - " + strAlbum + " - " + strGenre);

        //Create table layout to contains views with variable values
        TableLayout table = new TableLayout(this);
        table.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,
                LayoutParams.WRAP_CONTENT));
        //creates row with parameters
        TableRow row = new TableRow(this);
        row.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,
                LayoutParams.WRAP_CONTENT));

        //text views to contain variable values
        TextView tv1 = new TextView(this);
        tv1.setText(strBand);
        row.addView(tv1);
        TextView tv2 = new TextView(this);
        tv2.setText(strAlbum);
        row.addView(tv2);
        TextView tv3 = new TextView(this);
        tv3.setText(strGenre);
        row.addView(tv3);
        //adds the table row to the table layout
        table.addView(row);
    }

}// end onActivityResult()

}

I'm not sure if my activity callbacks are not placed properly in the code or if I'm not firing the intent properly or if I'm not setting up the callback with the right method or what. I know this topics has been discussed but I'm out of ideas. Thanks.

4

1 に答える 1

8

You've just got it backwards. If Activity1 is supposed to startActivity2 and Activity2 is supposed to send the result back to Activity1, you need to do it like this:

in Activity1:

Intent i = new Intent();
i.setClassName("jorge.jorge.jorge", "jorge.jorge.jorge.Activity2");
startActivityForResult(i); // This starts Activity2 and waits for the result

in Activity2:

Intent i = new Intent(getApplicationContext(), Activity1.class);
i.putExtra("strBand", strBand);
i.putExtra("strAlbum", strAlbum);
i.putExtra("strGenre", strGenre);
setResult(RESULT_OK, i);
finish();  // This closes Activity2 and generates the callback to Activity.onActivityResult()
于 2012-06-08T12:07:28.800 に答える