У меня есть 3 действия: 1 основное действие с некоторыми методами для вычисления позиций x, y и z, и 3 действия - это этажи, которые будут переключаться в зависимости от значения z.
Когда я перехожу от действия A (основное действие) к действию B, кажется, что данные, которые я использовал, сохраненные с помощью putExtra и getExtra, замораживаются до их начального значения (т. е. на первом этапе putExtra). Это нормально? Если да, то есть ли у вас какие-либо идеи относительно того, как я должен получить динамический доступ к x, y, z из другого действия?
В коде, который я покажу вам, x, y и z вычисляются в цикле, предназначенном только для тестирования. В противном случае у меня есть другие методы для их расчета (с использованием WiFi RSSI и алгоритма градиентного спуска)
MainActivity
public class MainActivity extends AppCompatActivity {
ImageView myImageView;
int i = 0;
int z = 1;
int x,y,f=1;
final int imageWidth = 930;
final int imageHeight = 560;
private Timer timer;
int flag_activity=1;
[....] Инициализация намерения
final Intent intent0 = new android.content.Intent(this, Rdc.class);
final Intent intent2 = new android.content.Intent(this, r2.class);
intent0.putExtra("X", i);
intent0.putExtra("Y", i);
intent0.putExtra("Z", f);
intent2.putExtra("X", i);
intent2.putExtra("Y", i);
intent2.putExtra("Z", f);
myImageView = (ImageView) findViewById(R.id.imageView);
VectorDrawableCompat vectorDrawable = VectorDrawableCompat.create(getResources(), R.drawable.ic_android_black_24dp, null);
myImageView.setImageDrawable(vectorDrawable);
//....
Цикл для обновления изображения и изменения действий в зависимости от значения f:
Timer T=new Timer();
T.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
runOnUiThread(new Runnable()
{
@Override
public void run()
{
i++;
i=i%10;
if(i==7) {f++; f=f%3;}
updateTextView(i,i,f);
if(f==1) {
myImageView.setTranslationX(i * imageWidth / 10);
myImageView.setTranslationY(i * imageHeight / 10);
flag_activity=1;
}
else {
if(f==2&&flag_activity!=2) {startActivity(intent2); flag_activity=2;}
else {
if(f==0&&flag_activity!=0) {startActivity(intent0); flag_activity=0;}
} }
}
});
}
}, 1000, 1000);
Другое действие (два других одинаковы, за исключением некоторых ресурсов).
public class r2 extends AppCompatActivity {
ImageView myImageView;
int imageWidth=930;
int imageHeight=560;
int x,y,z;
public void updateTextView(int a, int b, int c) {
String str="x :"+Integer.toString(a)+"y :"+Integer.toString(b)+"f :"+Integer.toString(c);
TextView textView = (TextView) findViewById(R.id.textView3);
textView.setText(str);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_r2);
myImageView = (ImageView) findViewById(R.id.imageView);
VectorDrawableCompat vectorDrawable = VectorDrawableCompat.create(getResources(), R.drawable.ic_android_black_24dp, null);
myImageView.setImageDrawable(vectorDrawable);
Timer T2=new Timer();
T2.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
runOnUiThread(new Runnable()
{
@Override
public void run()
{
x = getIntent().getIntExtra("X",1);
y = getIntent().getIntExtra("Y",1);
z = getIntent().getIntExtra("Z",1);
updateTextView(x,y,z);
if(z==2) {
myImageView.setTranslationX(x * imageWidth / 10);
myImageView.setTranslationY(y * imageHeight / 10);
}
else {
finish();
}
}
});
}
}, 1000, 1000);
}
}
Вы не показываете свои намерения и вызовы startActivity-ForResult().
it seems like the datas i've used saved with putExtra and getExtra are frozen to their initial value (i.e. at the 1st putExtra).
. Нет до последнего. Имеет смысл вызывать putExtra("X", ...) более одного раза. Так что избавьтесь от этой петли.Я не изменил startActivityForResluts. Я не знаю, каково его использование.
???? Не понимаю ни слова. Пожалуйста, покажите, что вы делаете после putExtra() и перед getIntExtra(), где вы пытаетесь получить это значение. Вы не можете просто ничего не делать между ними. Вы должны отправить намерение в первую очередь. Я думаю, вы не то делаете.
Отправить намерение? Вы имеете в виду putExtra?
Я сказал, что вы упустили что-то между putExtra() и getIntExtra(). Так что не будет поставитьExtra() ;-).
Это также выглядит так, как будто вы думаете, что два действия выполняются одновременно. Не рассчитывайте на это!
Итак, если я нахожусь в действии B, цикл в действии A не будет продолжаться? Мне кажется, что это так, потому что иногда появляется другая активность (поскольку у меня есть только
start(intent)
в A ).Возможно ли, что из-за потока пользовательского интерфейса он работает не так, как ожидалось?
Урок Android первый: ваша активность может быть прервана в любой момент.