2013-12-05 3 views
0

У меня есть Activity_A a Activity_B. Я использую onActivityResult и у меня есть проблема:как передать результат от alertDialog к onActivityResult

java.lang.RuntimeException: Сбой доставки результата ResultInfo {кто = NULL, запрос = 3, результат = -1, данные = Intent {(имеет дополнительные услуги) }} в деятельности {com.example.sellcar/com.example.sellcar.View_Offer}: android.database.CursorIndexOutOfBoundsException: Индекс 0 просил, с размером 0

Я предполагаю, что я не могу пройти таким образом, «результат» от alertDialog до onActivityResult. я не знаю, как решить эту проблему:/ Пожалуйста, помогите

Activity_A:

bBUTTON.setOnClickListener(new OnClickListener() {   
      @Override 
      public void onClick(View v) {   
      Intent intent = new Intent(Activity_A.this,Activity_B.class); 
      startActivityForResult(intent, 3); 

      } 
     }); 
... 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
      super.onActivityResult(requestCode, resultCode, data); 
      if(requestCode == 3 && resultCode == RESULT_OK){ 

       String pId = data.getStringExtra("MyData"); 

Toast.makeText(Activity_A.this,pId,Toast.LENGTH_LONG).show(); 
       } 
    } 

Activity_B:

AlertDialog.Builder builder=new AlertDialog.Builder(View_Sell.this); 
    builder.setTitle("UWAGA !").setMessage("blablabla"); 

    builder.setPositiveButton("YES", new DialogInterface.OnClickListener() {  
     @Override 
     public void onClick(DialogInterface dialog, int id) {                        
     String ostatnioDodanaSprzedaz="XYZ"; 
     Intent intent = new Intent(); 
     intent.putExtra("MyData", ostatnioDodanaSprzedaz); 
     setResult(RESULT_OK, intent); 
     onBackPressed();           
} }); 

    builder.setNegativeButton("NO", new DialogInterface.OnClickListener() { 
      @Override 
      public void onClick(DialogInterface dialog, int id) {        
} }); 

AlertDialog ad = builder.create(); 
ad.show(); 
+0

Я пытался использовать отделку() вместо onBackPressed(), но не работает – user2923999

ответ

1

Попробуйте заменить:

setResult(RESULT_OK, intent); 
onBackPressed(); 

на:

if (getParent() == null) { 
    setResult(RESULT_OK, intent); 
} else { 
    getParent().setResult(RESULT_OK, intent); 
} 
finish(); 
+0

также не работает:/ – user2923999

+0

это странно, потому что , Я попробовал ваш код, и он нормально работает для меня –

+0

sory, он работает :) это была еще одна ошибка. Спасибо за помощь – user2923999

0

Вы можете следовать шаблону наблюдателя.

Во-первых, создать интерфейс в самом классе активность:

public interface ResultListener { 
     void onResultSet(String text); 
    } 

Затем создать объект ResultListener глобально:

ResultListener = rl; 

Реализуйте метод onResultSet(String text) внутри OnCreate метода:

rl = new ResultListener() { 

      @Override 
      public void onPositiveResult(String text) { 
       Toast.makeText(context, text, Toast.LENGTH_LONG).show(); 
      } 
     }; 

Затем создайте AlertDialog

AlertDialog.Builder builder=new AlertDialog.Builder(this); 
    builder.setTitle("UWAGA !").setMessage("blablabla"); 

    builder.setPositiveButton("YES", new DialogInterface.OnClickListener() {  
     @Override 
     public void onClick(DialogInterface dialog, int id) {                        
     String ostatnioDodanaSprzedaz="XYZ"; 
     tl.onResultSet(ostatnioDodanaSprzedaz); 
     // onBackPressed();           
} }); 

    builder.setNegativeButton("NO", new DialogInterface.OnClickListener() { 
      @Override 
      public void onClick(DialogInterface dialog, int id) {        
} }); 
    builder.show(); 

Вот как окончательный код будет выглядеть:

 public class MainActivity extends Activity { 

      ResultListener rl; 

      @Override 
      public void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.main_layout); 

       rl = new ResultListener() { 
       @Override 
       public void onPositiveResult(String text) { 
        Toast.makeText(context, text, Toast.LENGTH_LONG).show(); 
       } 
      }; 

      AlertDialog.Builder builder=new AlertDialog.Builder(this); 
      builder.setTitle("UWAGA !").setMessage("blablabla"); 
      builder.setPositiveButton("YES", new DialogInterface.OnClickListener() {  
         @Override 
         public void onClick(DialogInterface dialog, int id) {                        
         String ostatnioDodanaSprzedaz="XYZ"; 
         rl.onResultSet(ostatnioDodanaSprzedaz); 
         // onBackPressed();           
       } }); 

      builder.setNegativeButton("NO", new DialogInterface.OnClickListener() { 
       @Override 
       public void onClick(DialogInterface dialog, int id) {        
       } }); 

      builder.show(); 

     } //onCreate closed 

     public interface ResultListener { 
       void onResultSet(String text); 
     } 

} //MainActivity Class closed 
Смежные вопросы