[英]Dynamic putExtra() and getExtra()
我有3個活動:1個主要活動,其中一些方法可以計算xy和z位置,這3個活動是根據z的值切換的樓層。
當我從活動A(主要活動)轉到B時,我使用putExtra和getExtra保存的數據似乎被凍結為其初始值(即,在第一個putExtra處)。 正常嗎? 如果是這樣,您是否對我應該如何從另一個活動動態訪問x,y,z有任何想法?
在代碼中,我將向您顯示x,y和z是在僅用於測試的循環中計算的。 否則,我還有其他方法來計算它們(使用WiFi RSSI和Gradient Descent算法)
主要活動
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);
}
}
不知道您打算如何使用這些功能。 但我會告訴你你應該怎么做
Intent intentForActivityB = new Intent(this,ActivityB.class);
intentForActivityB.putExtra("YourKey","Your data")
startActivity(intentForActivityB);
Inside ActivityB
intent.getIntExtra("YourKey",defaultValue);
因此,也許在您的情況下,數據沒有凍結,只是為您提供了默認值。
嘗試將多個數據傳遞到另一個活動時,最好使用捆綁軟件。
首先創建一個捆綁對象
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");
捆綁軟件支持許多數據類型。 請查看捆綁包文檔以了解更多詳細信息
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.