Передача данных из SurfaceView в другое действие

Объяснение приведенного ниже кода: Задача, которую я пытаюсь выполнить, состоит в том, чтобы отправить логическое значение из моей активности SurfaceView (surfaceActivity) в мою основную деятельность (mainActivity). Ниже приведены 4 части моего кода, инициализация mainActivity, инициализация SurfaceActivity, способ отправки логического значения и способ получения логического значения. Очевидно, что код, который я использую для отправки / получения информации, - это то, с чем большинство людей добились успеха через Интернет, просто мой случай немного отличается, учитывая, что у меня есть два действия, но SurfaceActivity устанавливается через mainActivity, поэтому не совсем быть независимым

Моя основная деятельность:

public class MainActivity extends Activity {

      public void onCreate(Bundle savedInstanceState) {
           super.onCreate(savedInstanceState);
           setContentView(new surfaceActivity(this));

           private Bundle bundle;
      }
 }

Который затем приводит к моему SurfaceView

public class surfaceActivity extends SurfaceView  implements SurfaceHolder.Callback {
     private MainThread thread;
     private Context context;

     public surfaceActivity(Context context) {
     super(context);
     getHolder().addCallback(this);
     thread = new MainThread(getHolder(), this);

     this.context = context;

     setFocusable(true);
     }

Затем, когда касание на экране зарегистрировано:

Intent i = new Intent(context, MainActivity.class);             
Bundle bundle = new Bundle();
bundle.putBoolean("boo",true);
i.putExtras(bundle);
startActionMode((Callback) i);

А затем в постоянно повторяющемся цикле обратно в классе MainActivity:

if (bundle != null)
{
    bundle = getIntent().getExtras();
    Boolean stuff = bundle.getBoolean("boo"); 
}

Кроме того, большинство людей используют startActivity(i); но затмение исправляет его до startActionMode((Callback) i);

Большое спасибо заранее!

2 ответа

MainActivity - это Activity, а SurfaceActivity (даже если в названии указано Activity) - это просто представление, добавленное как представление содержимого для MainActivity. MainActivity может объявлять ссылку на SurfaceActivity в качестве переменной Instance, а затем может считывать значения из SurfaceActivity.

Механизм, основанный на намерениях, обычно используется для передачи значений между действиями, в вашем случае у вас нет двух действий. У вас есть один вид деятельности и один вид.

Для вызова метода в MainActivity от SurfaceView (в примере OP, SurfaceActivity), вы можете сделать это:

MainActivity настроить:

public class MainActivity extends Activity {
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(new surfaceActivity(this));
        private Bundle bundle;
    }

    // Method to be called from the SurfaceView
    public void callMe(String valuePassed) {
        Log.d("DEBUG","MainActivity was passed ["+ valuePassed +"]");
    }
}

SurfaceView настроить:

public class SurfaceActivity extends SurfaceView 
                             implements SurfaceHolder.Callback {

    private MainThread thread;
    private Context context;

    public SurfaceActivity(Context context) {
        super(context);
        getHolder().addCallback(this);
        thread = new MainThread(getHolder(), this);

        this.context = context;

        setFocusable(true);
    }

    // This is where and how you make the call to MainActivity.
    // You cast the context as the MainActivity and call the method.
    private void passToMainActivity(String valToPass) {
        ((MainActivity) context).callMe(valToPass);
    }
}
Другие вопросы по тегам