【问题标题】:getting value from different activities with getParcelableExtra()使用 getParcelableExtra() 从不同的活动中获取价值
【发布时间】:2021-03-07 04:40:34
【问题描述】:

我有两个活动,分别称为 DrinksActivityFoodsActivity。两者都有自己的RecyclerViews 来显示项目。

它们运行良好,但我必须将它们的值传递给另一个名为..sample_activity 的活动。

这就是sample_activity 的样子。

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);
    }


}

从该特定活动的回收站视图中选择该项目时,我如何获得该项目的价值?

【问题讨论】:

  • 分享您打开此活动的代码。
  • 这是调用者活动。被调用的活动的方法如下所示。@Override public void onNoteClick(int position) { Intent intent = new Intent(this,sample_layout.class ); intent.putExtra("drinks", DrinksList.get(position));开始活动(意图); }
  • 从其他活动来看,它看起来像这样.. @Override public void onNoteClick(int position) { // FoodList.get(position) Intent intent = new Intent(this, sample_layout.class) ; intent.putExtra(“食物”,FoodList.get(位置));开始活动(意图); };
  • 你能分享整个代码吗?我需要检查列表位置的值。

标签: java android android-intent parcelable


【解决方案1】:

尝试使用这个

 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);
  }
}

【讨论】:

  • 如果对您有用,请为答案投票。它也会帮助其他人。
【解决方案2】:

我可以看到您正在使用数据库来存储数据,对吗?如果是这样,最好(也是最正确)的方法是在活动之间传递一些标识符(如“id”),然后从您需要的数据库中通过该 id 获取值。但是,如果您真的想传递整个对象,那么您需要使用可序列化或可打包(可打包是更好的选择,因为它来自 Android SDK)。然后在你获取值的活动中解析它。

编辑: 要获得可打包的价值调用:

Food food = getIntent().getExtras().getParcelable("food");

然后只需调用:

textView.setText(food.getYourField);

【讨论】:

  • 我没有使用数据库,它们只是来自 string.xml 文件的值。是的,我正在使用 parcelable
  • 那么这就是你需要的:getIntent().getExtras().getParcelable("food")
  • 你应该有这样的东西: Food food = getIntent().getExtras().getParcelable("food");只需调用 textView.setText(food.getYourField);
猜你喜欢
  • 1970-01-01
  • 2016-08-09
  • 2017-06-04
  • 2022-09-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-18
  • 1970-01-01
相关资源
最近更新 更多