0

Donc, j'obtiens mes données d'un service Web et j'utilise l'adaptateur RecyclerView. Dans la méthode onBindviewholder de RecyclerView.adapter, je veux passer les données à recyclerView dans MainActivity mais aussi passer les données (item) à MyMapsActivity.Le truc est onBindViewholder a setOnClickListener et setOnLongClickListener comme contrôles qui sont utilisés. Existe-t-il un moyen d'envoyer les données (élément) en utilisant une intention qui ne démarre pas l'activité ou existe-t-il un moyen de câbler un nouveau bouton dans la méthode onBindViewholder car ce qui se passe est quand l'application démarre directement sur MyMapsActivity ce qui est attendu. Existe-t-il un moyen de contrôler cela en utilisant un nouveau bouton qui peut interagir avec onBindViewholder ou y at-il un moyen de passer l'intention.putExtra sans démarrer MyMapsActivity.Maybe Ma compréhension est erronée mais voici mon code pour les méthodes et activités indiquées :Y at-il de toute façon d'envoyer des données dans une intention mise supplémentaire sans démarrer une activité?

onBindViewholder

public void onBindViewHolder(DataItemAdapter.ViewHolder holder, int position) { 
     final DataItem item = mItems.get(position); 


    try { 
     holder.titletext.setText(item.getTitle()); 
     holder.companyText.setText(item.getCompany()); 
     holder.cityText.setText(item.getCity()); 
     holder.salarytext.setText(""+ item.getSalary()); 
     holder.descriptionText.setText(item.getDescription()); 
     holder.responsibilityText.setText(item.getResponsibility()); 
     holder.latText.setText(""+ item.getLatitude()); 
     holder.lngText.setText(""+ item.getLongitude()); 
     holder.phoneText.setText(item.getPhone()); 
     holder.provinceText.setText(item.getProvince()); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    //click 
    holder.mView.setOnClickListener(new View.OnClickListener() {//getting viewholder class and ctor 
     @Override 
     public void onClick(View v) { 


      Intent intent = new Intent(mContext,DetailsActivity.class); 
      intent.putExtra(ITEM_KEY,item); 
      mContext.startActivity(intent); 
     } 
    }); 
    //long click 
    holder.mView.setOnLongClickListener(new View.OnLongClickListener() { 
     @Override 
     public boolean onLongClick(View v) { 
      Toast.makeText(mContext, "long click: " + item.getTitle(), Toast.LENGTH_SHORT).show(); 
      return false; 
     } 
    }); 

     // !!!!!----this is the intent Im talking about----!!! 
     Intent intent = new Intent(mContext,MyMapActivity.class); 
     intent.putExtra(ITEM_KEY,item); 
     mContext.startActivity(intent); 

} 

Ma méthode de cartes:

public void onMapReady(GoogleMap googleMap) { 
      final DataItem item = getIntent().getExtras() 
.getParcelable(DataItemAdapter.ITEM_KEY); //--------gets intent frm dataItemAdapter 

    if (item == null) { 
     throw new AssertionError("null data recived"); 
    } 
    mapReady = true; 
    mMap = googleMap; 
    LatLng latLngToronto = new LatLng(43.733092, -79.264254); 
    // LatLng latLnghome = new LatLng(43.656729, -79.377162); 

    CameraPosition target = CameraPosition.builder().target(latLngToronto).zoom(15).tilt(65).build(); 
    mMap.moveCamera(CameraUpdateFactory.newCameraPosition(target)); 
    mMap.setMapType(GoogleMap.MAP_TYPE_HYBRID); 


    markerDisplay(item.getTitle(),item.getLatitude(),item.getLongitude());//------maps jobs marker-------new 


    //add markers and 
    //instantiate 
    // mMap.addMarker(mp); 
    // mMap.addMarker(md); 


} 
+0

Si vous devez transmettre des données entre activités, cochez cette case [lien] (https://stackoverflow.com/questions/4878159/whats-the-best-way-to-share-data-between-activities#answer- 4878259) – matoni

+0

Merci mon problème persistait les données j'ai utilisé un Arraylist et itéré en utilisant un foreach. J'étais trop penser. –

Répondre

0

Vous n'avez pas besoin d'appeler méthode startAcivity. Il existe une méthode sendBroadcast pour partager l'intention avec d'autres composants.

String CUSTOM_ACTION = "com.example.YOUR_ACTION"; 

Intent i = new Intent(); 
i.setAction(CUSTOM_ACTION) 
intent.putExtra(ITEM_KEY,item); 
context.sendBroadcast(intent); 

Ensuite, vous pouvez recevoir votre intention avec BroadcastReceiver

public class MyReciever extends BroadcastReceiver { 
@Override 
    public void onReceive(Context context, Intent intent) { 
     String action = intent.getAction(); 
     if(action!=null && action.equals(CUSTOM_ACTION)){ 
      //do something 
     } 
    } 
} 
récepteur registre

avec la coutume IntentFilter en méthode onCreate de votre activité

IntentFilter filter = new IntentFilter(CUSTOM_ACTION); 
registerReceiver(myReceiver, filter); 

Et ne pas oublier désinscription dans OnDestroy

unregisterReceiver(myReceiver); 

P.S

Il existe plusieurs façons de transférer des données entre classes et composants. Cela dépend de votre objectif.
Récepteur de diffusion avec des intentions sont bonnes pour le transfert de données entre les services et les activités et pour le transfert de données entre les applications.

Si vous devez avoir accès à des données provenant de différents endroits, il existe d'autres moyens.
Si les données doivent être stockées sur un disque, la base de données est appropriée.
Pour stocker des données dans la RAM, vous pouvez utiliser une classe distincte et stocker cette classe en tant que singleton ou dans votre classe Application.

+0

hé, essayant de travailler dessus, obtenant des plantages quand j'essaie de charger l'activité Carte –

+0

Comment obtenez-vous les données du programme de diffusion et les partager dans l'activité? Disons que vous obtenez le daya et il est dans le si (action .... comment partagez-vous ces données avec le reste de l'activité –

+0

Vous pouvez créer un récepteur de diffusion interne de classe interne dans votre activité. méthodes de classe externe –