-1

J'ai une vue d'ensemble qui contient une vue de liste. Lorsqu'un élément est sélectionné, une intention est créée pour passer à DetailActivity et je lui passe un int.Android: Les données transmises avec intention disparaissent en revenant d'une hiérarchie plus profonde

Cet entier est affecté à une variable privée et est utilisé pour interroger la base de données.

Code DetailActivity:

private int mIssueId; 

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_issue_detail); 

    mIssueId = getIntent().getIntExtra(IssueOverviewFragment.INTENT_ISSUE_ID, -1); 
    ... 
} 

Dans le DetailActivity je peux aller à un GraphActivity. Mais quand j'appuie sur le bouton upButton dans le GraphActivity, l'application se bloque car la variable devient -1 dans le DetailActivity (et la base de données ne peut donc pas être interrogée correctement).

La hiérarchie est: OverviewActivity -> DetailActivity -> GraphActivity

Code GraphActivity:

protected void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_graph); 

     getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
     ... 
} 
@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.main_detail, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
     case R.id.action_logout: { 
      Utility.redirectToLogin(this); 
      break; 
     } 
     case android.R.id.home: 
      NavUtils.navigateUpFromSameTask(this); 
      return true; 
    } 
    return super.onOptionsItemSelected(item); 
} 

Comment puis-je conserver les valeurs de mon attribut mIssueId dans le DetailActivity?

+0

Postez votre code d'activité. Est-ce que vous surchargez la fonctionnalité du bouton "up"? –

+0

Peut-être que vous modifiez l'intention quelque part, publiez votre code d'activités complet s'il vous plaît. –

Répondre

0

L'intention a l'intention de transmettre des informations entre les activités. Lorsque Activity1 transmet le contrôle à Activity2 principalement lié au comportement de l'activité. Si vous avez des informations que vous devez partager dans une hiérarchie complexe ou être disponible pour l'ensemble de votre application, vous pouvez choisir entre Préférences partagées si vous avez besoin de persistance ou utiliser une classe Singleton si les données ne sont nécessaires que lorsque l'application est en cours d'exécution.

Ceci est un exemple pour une information en gardant la classe Singleton à la disposition de l'application entière:

public class AppData { 
    private static AppData ourInstance = new AppData(); 

    public int score; 

    public static AppData getInstance() { 
    return ourInstance; 
    } 
} 

Et comment y accéder:

AppData.getInstance().score = 100; 

Hope it helps.

0

Il semble que vous obtenez une valeur par défaut car il y a eu un problème lors de l'obtention de l'intention dans DetailActivity. Vous pouvez essayer de casser votre demande un peu avec

mIssueId = getIntent().getExtras().getInt(); 

Mais je pense que la question est probablement la façon dont vous mettez l'int dans l'intention.

Il devrait ressembler à

Intent intent = new Intent(context, DetailActivity.class); 
intent.putExtra(IssueOverviewFragment.INTENT_ISSUE_ID, mIssueId); 
startActivity(intent); 
+0

cette intention provient du IssueOverviewFragment et ne donne aucun problème. Mais le problème est quand je retourne à la DetailActivity de la GraphActivity, que cette valeur supplémentaire de l'intention ne tient pas la valeur précédemment obtenue. – Matt