this is my first post here so be gentle :p
Here is the thing, I'm facing a really though issue and after several research i did not manage to figure out a clean solution. Let me explain:

I'm actually developing an android app for restaurant management. 
In activity A, i'm able to create some articles with different parameters (picture, name, price ..). 
I can also create a menu in which i indicate which articles are included. To do so i run Activity B that contains a dynamic list of the available articles (the ones i created) to be chosen. After picking up some of them the customised chosen objects are sent to Activity A through Parcel. And the chosen article list is updated in the menu.
But here is the thing, as far as i know, using Parcels create another instance of the object. As a result, if i modify or delete an article, the article list included in the menu does not change, and obviously i would like the list in the menu to be automatically updated.

Is there a way to simply pass customised objects through activities by reference?
What could be a clean solution to make the article list in the menu dynamic?

Here is some code:

In Activity A, in the menu interface i click + button to add an article, which run Activity B (the extras is the list of articles already included in the menu before, so in the beginning it's empty).

```
//Add article
    FloatingActionButton addArticleButton = (FloatingActionButton)parentActivity.findViewById(R.id.addArticleButton);
    addArticleButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            showMenuDetails(menuListView,menuAdapter,currentMenu);
            parentActivity.startActivityForResult(new Intent(parentActivity.getApplicationContext(),ChooseArticleActivity.class).putParcelableArrayListExtra("menuArticleList",currentMenu.getArticles()),PICK_ARTICLES);
        }
    });

```

In activity B: I select Articles in a list of available Articles (the ones i created). After picking up i press OK button to put the list of chosen articles in result Intent as Parcelable Extras

```
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.choose_article_layout);
    initializeLists();

    this.resultIntent = new Intent();
}

private void initializeLists(){
    final ListView articleToChoose = (ListView)findViewById(R.id.articleToChoose);
    final ListView articleChosen = (ListView)findViewById(R.id.articleChosen);

    final ArrayList<Article> articleToChooseList = (ArrayList<Article>)MainActivity.model.getArticleList().getArticleList().clone();
    final ArrayList<Parcelable> articleChosenListParcelable = (ArrayList<Parcelable>)this.getIntent().getParcelableArrayListExtra("menuArticleList");
    final ArticleAdapter articleToChooseAdapter = new ArticleAdapter(getApplicationContext(), articleToChooseList);
    articleToChoose.setAdapter(articleToChooseAdapter);

    ArrayList<Article> articleChosenListTemp = new ArrayList<>();
    ArrayList<Article> articleToRemove = new ArrayList<>();
    for(Parcelable a:articleChosenListParcelable){
        articleChosenListTemp.add((Article)a);
        for(Article article:articleToChooseList){
            if(article.getName().equals(((Article) a).getName())){
                articleToRemove.add(article);
            }
        }
    }
    articleToChooseList.removeAll(articleToRemove);
    articleToChooseAdapter.notifyDataSetChanged();

    final ArrayList<Article> articleChosenList = articleChosenListTemp;

    final ArticleAdapter articleChosenAdapter = new ArticleAdapter(getApplicationContext(),articleChosenList);

    articleChosen.setAdapter(articleChosenAdapter);

    articleChosen.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            Article articleClicked = articleChosenAdapter.getItem(position);
            articleChosenList.remove(articleClicked);
            articleToChooseList.add(articleClicked);
            articleChosenAdapter.notifyDataSetChanged();
            articleToChooseAdapter.notifyDataSetChanged();
        }
    });

    articleToChoose.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            Article articleClicked = articleToChooseAdapter.getItem(position);
            if(!articleChosenList.contains(articleClicked)){
                articleChosenList.add(articleClicked);
                articleToChooseList.remove(articleClicked);
                articleToChooseAdapter.notifyDataSetChanged();
                articleChosenAdapter.notifyDataSetChanged();
            }
        }
    });

    Button okButton = (Button)findViewById(R.id.okButton);
    okButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            chosenArticleListAttr = articleChosenList;
            resultIntent.putParcelableArrayListExtra("articleList",chosenArticleListAttr);
            setResult(RESULT_OK,resultIntent);
            finish();
        }
    });

    Button cancelButton = (Button)findViewById(R.id.cancelButton);
    cancelButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            finish();
        }
    });
}

```

In activity A, in onActivityResult i catch the result and update the list, but the added Articles here are not the same instance as the article list in the model

```
if(requestCode==PICK_ARTICLES && resultCode==RESULT_OK){
        ArticleAdapter articleAdapter = (ArticleAdapter) gestionMenusLayout.getMenuArticleListView().getAdapter();

        ArrayList<Parcelable> chosenArticleList = (ArrayList<Parcelable>)data.getParcelableArrayListExtra("articleList");
        gestionMenusLayout.getCurrentMenu().getArticles().clear();
        for(Parcelable a:chosenArticleList){
            gestionMenusLayout.getCurrentMenu().addArticle((Article)a);
        }
        articleAdapter.notifyDataSetChanged();
    }

```