Активность не вызывает onActivityResult - PullRequest
1 голос
/ 27 марта 2012

программа не вызывает функцию ActivityResult, я был во многих постах, но я не могу заставить ее работать.

Я использую эмулятор Android 3.0.

это код GameScreen.java

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) {      
  super.onActivityResult(requestCode, resultCode, data); 
  switch(requestCode) { 
    case 0: { 
      if (resultCode == Activity.RESULT_OK) {    
          String newText = data.getStringExtra("isRunning");          
          // TODO Update your TextView.
          isRunning = true;
      } 
      break; 
    } 
  } 
}
 public void pause(){
    clickListener = new OnClickListener() {         
        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub              
            pause.setImageResource(R.drawable.pauseafter);
            isRunning = false;
            Intent intent = new Intent(Gamescreen.this, Shop.class);                  
            startActivityForResult(intent, 0);
        }
    };
}

это код Shop.java

public void returnButton(){
    resume.setOnClickListener(new OnClickListener() {           
        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            Intent intent = new Intent();
            setResult(Activity.RESULT_OK,intent);
            finish();
        }
    });
}   

Ответы [ 4 ]

3 голосов
/ 27 марта 2012

Для тестирования я создал простое приложение.Ничего особенного, просто макет по умолчанию и два вида деятельности.Тост в onActivityResult отображается правильно.

Вот полный рабочий код:

файл OnReturnActivity.java:

package some.package;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.Toast;

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

        Intent i = new Intent(this, GimmeReturn.class);
        startActivityForResult(i, 0);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        // TODO Auto-generated method stub
        Toast.makeText(this, "Got Result " + String.valueOf(resultCode),     Toast.LENGTH_SHORT).show();
        super.onActivityResult(requestCode, resultCode, data);
    }
}

файл GimmeReturn.java:

package some.package;

import android.app.Activity;
import android.os.Bundle;

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

        Toast.makeText(this, "Returning!", Toast.LENGTH_SHORT).show();
        setResult(RESULT_OK);
        finish();
    }
}

Оба действия необходимо добавить в манифест Android .Действие OnReturnActivity имеет действие MAIN и категорию LAUNCHER (и запускается как основное действие для приложения).Активность GimmeResult просто добавлена ​​без какого-либо IntentFilter.

1 голос
/ 27 марта 2012

Просто используйте «RESULT_OK» .. Как это

Intent i=new Intent();
 setResult(RESULT_OK,i);
 finish();

в OnActivityResult:

switch(requestcode)
{
case 0:  if(resultcode==RESULT_OK)
     {

          //Log.e("check","in OAR");
          } 
}
0 голосов
/ 27 марта 2012

Использовать setData из вызываемой активности.

0 голосов
/ 27 марта 2012

Твой код мне кажется. Хорошо, твой onActivityResult никогда не звонит или просто не работает в случае 0: ты пытался его отладить. там ничто не кажется мне необычным

...