2017-09-14 3 views
0

Je rencontre des problèmes pour stocker des extras d'intention de mon activité précédente lorsque j'utilise une autre intention pour ouvrir une activité et renvoyer le résultat.Rassembler plusieurs extras d'intention tout en enregistrant les résultats pendant le retour à l'activité principale

Logic:

  • Activité A: recevoir la chaîne de case à cocher, utilise hasExtra intention de passer à l'activité b
  • Activité B: Liste des champs d'édition de texte avec des boutons à l'activité c
  • Activité C : utilise l'intention supplémentaire pour obtenir la chaîne et passer à un autre champ editTextField dans l'activité b

Le problème est que je continue à perdre l'intentionExtra de a à b. Je m'excuse si ma description n'est pas complète, je suis nouveau à Java.

Activité A

public class PipesInspection extends AppCompatActivity{ 
private static final String TAG = "PipesInspection"; 
ArrayList<String> pipesInspectionSelection = new ArrayList<String>(); 
Button nextButtonToPost; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.residential_pipes_inspection_lv_selected); 
    Log.d(TAG, "onCreate: starting"); 
    initialiseWidgets(); 
} 
public void initialiseWidgets(){ 
    nextButtonToPost = (Button) findViewById(R.id.nextButton); 
    nextButtonToPost.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      String final_category_selection = ""; 
      for (String Selections : pipesInspectionSelection){ 
       final_category_selection = final_category_selection + Selections + ", "; 
      } 
      Log.v(TAG,"gotten text: " + final_category_selection); 
      String selectedChoices = pipesInspectionSelected.getText().toString(); 
      Intent pipesInspectionIntent = new Intent(v.getContext(), PostAJobActivity.class); 
      pipesInspectionIntent.putExtra("selectedChoices", selectedChoices); 
      v.getContext().startActivity(pipesInspectionIntent); 
     } 
    }); 
} 
} 

Activité B

public class PostAJobActivity extends AppCompatActivity { 
private static final String TAG = "PostAJobActivity"; 
EditText jobTitle, jobDescription, jobLocation; 
String location, title; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_post_a_job); 
    Log.d(TAG, "onCreate: starting"); 
    jobDescription = (EditText)findViewById(R.id.input_job_description); 
    mapsButton = (ImageButton) findViewById(R.id.mapButton); 
    mapsButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Intent intent = new Intent(mContext, LaunchMapsActivity.class); 
      startActivity(intent); 
     } 
    }); 
     getIntentExtras(); 
} 
public void getIntentExtras(){ 
    jobLocation = (EditText) findViewById(R.id.location); 
    Intent intentLocation =getIntent(); 
    location= intentLocation.getStringExtra("location"); 
    jobLocation.setText(location); 


    jobTitle = (EditText) findViewById(R.id.title); 
    Intent pipesInspectionIntent = getIntent(); 
    title = pipesInspectionIntent.getStringExtra("selectedChoices"); 
    jobTitle.setText(title); 
} 
} 

Activité C

public class PlaceListAdapter extends RecyclerView.Adapter<PlaceListAdapter.PlaceViewHolder> { 

private Context mContext; 
private PlaceBuffer mPlaces; 


public PlaceListAdapter(Context context, PlaceBuffer places) { 
    this.mContext = context; 
    this.mPlaces = places; 
} 

@Override 
public PlaceViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    // Get the RecyclerView item layout 
    LayoutInflater inflater = LayoutInflater.from(mContext); 
    View view = inflater.inflate(R.layout.maps_item_place_card, parent, false); 

    return new PlaceViewHolder(view); 
} 

@Override 
public void onBindViewHolder(final PlaceViewHolder holder, int position) { 
    String placeName = mPlaces.get(position).getName().toString(); 
    String placeAddress = mPlaces.get(position).getAddress().toString(); 
    holder.nameTextView.setText(placeName); 
    holder.addressTextView.setText(placeAddress); 
    holder.itemView.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Intent intentLocation = new Intent(v.getContext(), PostAJobActivity.class); 
      intentLocation.putExtra("location",holder.nameTextView.getText().toString()+ 
        ", " + holder.addressTextView.getText().toString()); 
        v.getContext().startActivity(intentLocation); 
     } 
     }); 

} 
+0

Êtes-vous sûr pipesInspectionSelected.getText(). ToString() a la bonne valeur que vous voulez passer? – roostertech

+0

@roostertech oui c'est –

Répondre

0

Je pense que cet article peut Je ne suis pas sûr de bien comprendre le problème ... l'activité A démarre d'abord et transmet les données à l'activité B qui invoque l'activité C et obtient des données de celle-ci, retourne à l'activité B qui utilise les données collectées des deux activités à faire quelque chose .... Si c'est votre problème vous ne devriez pas commencer l'activité C la façon normale vous devez utiliser startActivityforresult() formez l'activité B pour démarrer l'activité C et attendez qu'elle se termine puis retournez à B avec les données collectées à partir de C .... en démarrant l'activité B de l'activité C créera une nouvelle instance de B sans que les données ne soient collectées du formulaire A en utilisant ainsi l'instance de B avec les données de A attendra que C finisse et en prenne les données dans plus à ce mouvement le getIntentExtras() fonction à l'intérieur du onClick()

+0

activité b est l'activité principale pour collecter des informations de l'activité c et a, mais le flux commence par l'activité A, vous proposez dans l'activité b je devrais essayer startActicityForResult au lieu de StartActivity (intention)? –

+0

oui .... dans l'activité B utiliser startActivityForResult pour démarrer l'activité C @ T-lang –

+0

merci pour la réponse, j'ai pu ajouter onActivityResult et j'ai utilisé la méthode startActivityForResult pour gérer l'intention de l'activité B à C, mais je ne pouvais pas ajoutez "setResult" à partir de l'activité c onClick de onBindViewHolder. laissez-moi savoir si je dois modifier mon code pour vous montrer? @ Ahmad-Rajab –