J'ai un ListView
avec chaque ligne contenant un TextView
. Au clic de l'utilisateur, j'obtiens la valeur du TextView
et je le stocke dans une variable String, et l'utilisateur est dirigé vers une autre activité où il/elle doit entrer des données sur ledit TextView
. Afin de ne pas perdre l'état d'information de la première activité, j'ai dû utiliser startActivityForResult()
et plus tard obtenir les informations de la deuxième activité avec la méthode onActivityResult()
. Le problème est le suivant: J'ai besoin de comparer une valeur avec celle de TextView en question, cependant la variable String qui contient supposément la valeur de TextView est null.La valeur de chaîne est nulle
Avant de démarrer la deuxième activité, je grille la valeur String et renvoie la chaîne correcte, mais pas dans le onActivityResult()
, où elle renvoie null.
Pourquoi cela se produit-il? L'intention que j'ai utilisée n'est-elle pas censée conserver toutes les informations de l'activité ouverte?
onItemClick de ListView
@Override
public void onItemClick(AdapterView<?> listView, View itemView, int itemPosition, long itemID)
{
clickedError = ((TextView)itemView).getText().toString();
String errorIDQuery = "SELECT _id FROM " + TABLE_ERROR + " WHERE error_description LIKE '" + clickedError + "';";
Cursor getErrorID = db.rawQuery(errorIDQuery, null);
getErrorID.moveToFirst();
errorID = getErrorID.getInt(0);
Intent intent = new Intent(Repair.this, Material.class);
intent.putStringArrayListExtra("materialList", materialList);
startActivityForResult(intent, 1);
Toast.makeText(getApplicationContext(), clickedError, Toast.LENGTH_LONG).show();
}
onActivityResult
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
if(resultCode == RESULT_OK)
{
@SuppressWarnings("unchecked")
HashMap <String, String> materialDetails = (HashMap <String, String>)data.getSerializableExtra("map");
Set<?> set = materialDetails.entrySet();
Iterator<?> i = set.iterator();
ArrayList<String> materialNames = new ArrayList<String>();
ArrayList<String> materialAmounts = new ArrayList<String>();
do
{
@SuppressWarnings("rawtypes")
Map.Entry me = (Map.Entry)i.next();
materialNames.add(me.getKey().toString());
materialAmounts.add(me.getValue().toString());
}
while (i.hasNext());
for(Error e : errorList)
{
// ----- COMPARING THE VALUES -----
// here clickedError is null
if(e.description.equals(clickedError))
{
for(int j = 0; j < materialNames.size(); j++)
{
MaterialClass mc = new MaterialClass();
mc.setName(materialNames.get(j));
mc.setAmount(Integer.parseInt(materialAmounts.get(j)));
e.materialList.add(mc);
}
if (e.materialList.size() != 0)
e.checked = true;
else
e.checked = false;
}
}
Merci. Ce n'était pas statique. Je n'ai même pas vérifié ça. – ClaireG
Tout en rendant la valeur statique lui permet de conserver sa valeur entre les instances, c'est une mauvaise pratique. Vous ne seriez pas en mesure d'utiliser plus d'une instance distincte de cette classe sans interférence. La réponse de @delblanco (http://stackoverflow.com/a/18227585/316424) me semble plus appropriée. –