如何在Android的“活动”之间传递数据?
示例:我分组了 CardView在第二个活动中,我收集了这张卡 (它向用户显示此活动中有多少张卡)
我想将卡号传递给第一个活动
第二项活动
public class Skin extends AppCompatActivity {
private Toolbar toolbar;
public TextView tx;
private static int mysize;
public List<SettersAndGetters> lstPress;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_mainm);
TextView tt = (TextView) findViewById(R.id.titel_card);
Button add = (Button) findViewById(R.id.add);
toolbar = (Toolbar) findViewById(R.id.toolbar20);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayShowTitleEnabled(false);
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v)
{
v.setFocusableInTouchMode(true);
v.requestFocus();
onBackPressed();
}
});
add.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(Skin.this, ADD.class);
startActivity(intent);
}
});
//The contents of the card that you collected
tt.setText(R.string.cn1);
lstPress = new ArrayList<>();
lstPress.add(new SettersAndGetters(R.string.cr5, R.string.c2, R.string.com1, R.string.des5, R.drawable.p5, 120, 55, 10000005));
lstPress.add(new SettersAndGetters(R.string.cr1, R.string.c2, R.string.com1, R.string.des1, R.drawable.p2, 12, 12, 1800000));
lstPress.add(new SettersAndGetters(R.string.cr1, R.string.c2, R.string.com1, R.string.des1, R.drawable.p2, 12, 12, 1800000));
lstPress.add(new SettersAndGetters(R.string.cr1, R.string.c2, R.string.com1, R.string.des1, R.drawable.p2, 12, 12, 1800000));
lstPress.add(new SettersAndGetters(R.string.cr1, R.string.c2, R.string.com1, R.string.des1, R.drawable.p2, 12, 12, 1800000));
lstPress.add(new SettersAndGetters(R.string.cr1, R.string.c2, R.string.com1, R.string.des1, R.drawable.p2, 12, 12, 1800000));
tx = (TextView) findViewById(R.id.c);
int size = lstPress.size(); //here This line works great for me, but I want it in the first class (pass it to a class before it)
tx.setText("" + size);
mysize=size;
Toast.makeText(getApplicationContext(),"Size="+size,Toast.LENGTH_LONG).show();
RecyclerView myr = (RecyclerView) findViewById(R.id.recycler_view);
RecyclerViewAdapter myAdapter = new RecyclerViewAdapter(this, lstPress);
myr.setLayoutManager(new GridLayoutManager(this, 2));
myr.setAdapter(myAdapter);
}
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
return true;
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_add, menu);
// Inflate switch
ImageButton re = (ImageButton) menu.findItem(R.id.item_switch2)
.getActionView().findViewById(R.id.back2);
re.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onBackPressed();
Toast.makeText(Skin.this, "hhi", Toast.LENGTH_SHORT).show();
}
});
ImageButton btnubload = (ImageButton) menu.findItem(R.id.item_switch2)
.getActionView().findViewById(R.id.btnaddUPLOAD);
btnubload.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(Skin.this, ADD.class);
startActivity(intent);
}
});
return true;
}
@Override
protected void attachBaseContext(Context newBase) {
super.attachBaseContext(ViewPumpContextWrapper.wrap(newBase));
}
@Override
public boolean onSupportNavigateUp() {
onBackPressed();
return true;
}
public static int getMysize(){
return mysize;
}
}
MainActivity是第一个活动
public class MainActivity extends AppCompatActivity implements BootShett.BottomSheetListener {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_mainm);
TextView tt = (TextView) findViewById(R.id.Number_of_badges)
int c=Skin.getMysize();
tt.setText(""+c);
}
答案 0 :(得分:2)
要在活动之间传递数据,请使用Intents。
例如,在打开“活动”之前设置一些数据:
Intent intent = new Intent(Skin.this, ADD.class);
intent.putExtra("key_a", "hello world");
intent.putExtra("key_b", 123);
intent.putExtra("key_c", true);
startActivity(intent);
并在其他活动中检索它:
protected void onCreate(Bundle savedInstanceState) {
....
final String valueA = this.getIntent().getStringExtra("key_a");
final int valueB = this.getIntent().getIntExtra("key_b", 0);
final boolean valueC = this.getIntent().getBooleanExtra("key_c", false);
....
}
如果相反,则需要从第二个活动中返回一个值,因此在反向模式下,请使用startActivityForResult(而不是startActivity)开始第二个活动,然后在第一个活动是onActivityResult方法来处理结果。有关从活动返回值的更多文档,请参见this link。
示例:
在第一个活动中,您必须使用 startActivityForResult 开始第二个活动:
Intent intent = new Intent(this, SecondActivity.class);
this.startActivityForResult(intent, YUR_REQUEST_CODE);
在第二个活动中,通过调用 finish 将其关闭,然后使用 setResult 设置返回值:
public void onClick(View view) {
final Intent intent = new Intent();
intent.putExtra("key_a", 1234567890);
setResult(YUR_REQUEST_CODE, intent);
finish();
}
回到第一个活动时,您将自动通过 onActivityResult
方法获取结果@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == YOUR_REQUEST_CODE) {
final int value = data.getIntExtra("key_a", 0);
....
}
}
答案 1 :(得分:1)
您还可以使用共享首选项:
在第一次活动中添加此代码
SharedPreferences sp;
sp = getSharedPreferences("card",MODE_PRIVATE);
int cardNumber = Skin.getMysize();
sp.edit().putInt("card_number", cardNumber).apply();
在第二个活动中添加此代码
SharedPreferences sp;
sp = getSharedPreferences("card",MODE_PRIVATE);
int cardNumber = sp.getInt("card_number", "");
答案 2 :(得分:1)
在这种情况下,只需在第二个活动中执行此操作即可:
Intent intent = new Intent();
intent.putExtra(key, value);
setResult(result key, intent);
finish();
在您的第一个活动中,通过onActivityResult获取结果