Java 使用getParcelableExtra()从不同的活动中获取价值
我有两个活动,分别称为Java 使用getParcelableExtra()从不同的活动中获取价值,java,android,android-intent,parcelable,Java,Android,Android Intent,Parcelable,我有两个活动,分别称为drinksavity和foodsavity。两者都有自己的RecyclerViews来显示项目 他们工作得很好,但我必须将他们的价值观传递给另一个名为示例活动 这就是sample\u活动的样子 public class sample_layout extends AppCompatActivity { private DrawerLayout dl; private ActionBarDrawerToggle t; private Navigat
drinksavity
和foodsavity
。两者都有自己的RecyclerViews
来显示项目
他们工作得很好,但我必须将他们的价值观传递给另一个名为<代码>示例活动
这就是sample\u活动的样子
public class sample_layout extends AppCompatActivity {
private DrawerLayout dl;
private ActionBarDrawerToggle t;
private NavigationView nv;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.sample_layout);
SetTexts();
Navigation();
TextView textView = findViewById(R.id.txtFoodName);
Intent intent = getIntent();
DrinksModel drinksM = intent.getParcelableExtra("drinks");
FoodModel foodM = intent.getParcelableExtra("foods");
//how can i set the textView from their own getParcelableExtra values
String FoodName = foodM.getFoodName();
textView.setText(FoodName);
//how can i set the textView from their own getParcelableExtra values
String DrinkName = drinksM.getDrinkName();
textView.setText(DrinkName);
}
public String getName(String email) {
String stringList = null;
DatabaseHelperAccounts db = new DatabaseHelperAccounts(this);
SQLiteDatabase dbb = db.getWritableDatabase();
String selectQuery = "SELECT FullName FROM " + db.DATABASE_TABLE + " WHERE email = '" + email + "'";
Cursor c = dbb.rawQuery(selectQuery, null);
if (c != null) {
c.moveToFirst();
while (c.isAfterLast() == false) {
String name2 = (c.getString(c.getColumnIndex("FullName")));
stringList = name2;
c.moveToNext();
}
}
return stringList;
}
public void SetTexts() {
String StringEmail = LoginFragment.EmailString;
NavigationView nav_view = (NavigationView) findViewById(R.id.nv);//this is navigation view from my main xml where i call another xml file
View header = nav_view.getHeaderView(0);//set View header to nav_view first element (i guess)
TextView UserFullNameNav = (TextView) header.findViewById(R.id.UserFullNameNav);//now assign textview imeNaloga to header.id since we made View header.
TextView UserEmailNav = (TextView) header.findViewById(R.id.UserEmailNav);
getName(StringEmail);
UserEmailNav.setText(StringEmail);// And now just set text to that textview
UserFullNameNav.setText(getName(StringEmail));
}
public void Navigation() {
dl = findViewById(R.id.sampleLayout);
t = new ActionBarDrawerToggle(this, dl, R.string.open, R.string.close);
dl.addDrawerListener(t);
t.syncState();
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
nv = findViewById(R.id.nv);
nv.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
int id = item.getItemId();
switch (id) {
case R.id.itemDrinks:
Intent DrinksIntent = new Intent(getApplicationContext(), DrinksActivity.class);
startActivity(DrinksIntent);
break;
case R.id.itemFoods:
Intent FoodsIntent = new Intent(getApplicationContext(), FoodsActivity.class);
startActivity(FoodsIntent);
break;
case R.id.itmLogout:
Intent LogOut = new Intent(getApplicationContext(), MainActivity.class);
startActivity(LogOut);
finish();
default:
return true;
}
return true;
}
});
}
@Override
public boolean onOptionsItemSelected(@NonNull 'MenuItem' item)
{
if ( t.onOptionsItemSelected(item))
return true;
return super.onOptionsItemSelected(item);
}
}
当从特定活动的recyclerview中选择该项时,如何获取该项的值?正如我所见,您正在使用数据库存储数据,对吗?如果是这样,最好(也是最正确)的方法是在活动之间传递一些标识符(如“id”),然后从需要的数据库中通过该id获取值。但是,如果您真的想传递整个对象,那么您需要使用serializable或parcelable(parcelable是更好的选择,因为它来自androidsdk)。然后在获取值的活动中,只需解析它
编辑:
要获取可包裹值,请调用:
Food food = getIntent().getExtras().getParcelable("food");
然后打电话:
textView.setText(food.getYourField);
试着用这个
if (getIntent()!=null ){
if (getIntent.hasExtra("drinks")){
DrinksModel drinksM = intent.getParcelableExtra("drinks");
String DrinkName = drinksM.getDrinkName();
textView.setText(DrinkName);
}else if(getIntent.hasExtra("foods")){
FoodModel foodM = intent.getParcelableExtra("foods");
String FoodName = foodM.getFoodName();
textView.setText(FoodName);
}
}
共享从何处打开此活动的代码。这是调用方活动。。正在调用的活动中的方法如下@重写public void onNoteClick(int position){Intent Intent Intent=new Intent(this,sample_layout.class);Intent.putExtra(“drinks”,DrinksList.get(position));startActivity(Intent);}从另一个活动来看,它是这样的@重写public void onNoteClick(int position){//FoodList.get(position)Intent Intent Intent=new Intent(this,sample_layout.class);Intent.putExtra(“food”,FoodList.get(position));startActivity(Intent);};你能分享整个代码吗?我需要检查lists position.im的值,我没有使用数据库,它们只是string.xml文件中的值。是的,我在用包裹,这就是你需要的:getIntent().getExtras().getParcelable(“食物”)你应该有这样的东西:food food=getIntent().getExtras().getParcelable(“食物”);只需调用textView.setText(food.getYourField);如果答案对你有用,请投票表决。它也会帮助其他人。