Передача данных из 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);
}
}