2012-06-07 2 views
1

Я прочитал ранее размещенные вопросы и ответы в течение 2 дней, и я пробовал все предложенные варианты, а также устанавливаю, что мой атрибут launchMode соответствует стандарту в моем манифесте.Передача данных между действиями - Android SDK

Я пытаюсь передать данные из своего второго действия обратно в свое первое действие после нажатия кнопки. После того, как я нажму кнопку, начнется первое действие, но оно не вернется к моему методу onActivityResult(). Я не могу понять, почему это происходит.

Вот мой код от деятельности 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();  

     } 
    }); 

Вот активность 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() 

}

Я не уверен, если мои обратные вызовы активности не помещаются должным образом в коде или если я не увольняю намерение должным образом или если я не настраиваю обратный вызов с правильным методом или что. Я знаю, что эти темы обсуждались, но у меня нет идей. Благодарю.

ответ

8

Вы только что получили его назад. Если Activity1 предполагается startActivity2 и деятельности2 должен отправить результат обратно Activity1, что вам нужно сделать это следующим образом:

в Activity1:

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

в деятельности2:

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() 
+0

О, это имеет смысл. Это сумасшедший, я мог бы найти подходящий пример, указывающий на это сам. Я консультировался с учебником и несколькими сообщениями с хорошими ответами, но в этом контексте не хватало. Большое спасибо, я ценю это. – rocklandcitizen

+1

Рад помочь. Вы можете помочь мне, приняв мой ответ (нажмите зеленую галочку). –

Смежные вопросы