我有3个活动:1个主要活动,有一些计算x和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);
}
}
答案 0 :(得分:0)
不确定如何将额外内容放入意图中。但我会告诉你应该怎么做
Intent intentForActivityB = new Intent(this,ActivityB.class);
intentForActivityB.putExtra("YourKey","Your data")
startActivity(intentForActivityB);
Inside ActivityB
intent.getIntExtra("YourKey",defaultValue);
因此,在您的情况下,数据不会被冻结,只是为您提供默认值。
答案 1 :(得分:0)
当您尝试将多个数据传递到另一个活动时,最好使用bundle。
首先创建一个包对象
Bundle bundle = new Bundle();
bundle.putString("key1", "string data");
bundle.putInt("key2",12345);
然后有意地传递你的包。小心你必须使用putExtras而不是putExtra
Intent intent = new Intent(context, destinationClass);
intent.putExtras(bundle);
然后启动意图
context.startActivity(intent);
在目标类上,您可以使用getExtras
接收包Bundle bundle =getIntent().getExtras();
从该捆绑包中,您可以提取数据
String yourStringData =
bundle.getString("key1");
int youtIntData = bundle.getInt("key2");
Bundle支持许多数据类型。有关详细信息,请查看bundle documentation