0

Webサービスからデータを取得し、RecyclerViewアダプタを使用しています。RecyclerView.adapterのonBindviewholderメソッドで、MainActivityのrecyclerViewにデータを渡したいだけですが、データ(項目)をMyMapsActivityに渡します。これはonBindViewholderです使用されているコントロールとしてsetOnClickListenerと setOnLongClickListenerがあります。アクティビティを開始しないインテントを使用してデータ(アイテム)を送信する方法があるか、onBindViewholderメソッド内で新しいボタンをワイヤリングする方法があるかどうかは、アプリケーションが起動してMyMapsActivityこれは期待される。 onBindViewholderとやりとりできる新しいボタンを使うか、MyMapsActivityを開始しないでintent.putExtraを渡す方法がありますか?私の理解には欠陥がありますが、ここにはメソッドとアクティビティのコードがあります:あなたがstartAcivityメソッドを呼び出す必要はありませんアクティビティを開始せずに余分なインテントでデータを送信することはありますか?

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

アクティビティ間でデータを渡す必要がある場合は、[link](https://stackoverflow.com/questions/4878159/whats-the-best-way-to-share-data-between-activities#answer- 4878259) – matoni

+0

私はArraylistを使用してデータを永続化していましたが、foreachを使って繰り返しました。私はそれを考えていた。 –

答えて

0

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); 

} 

マイマップ方法onBindViewholder

。 他のコンポーネントとインテントを共有するsendBroadcastメソッドがあります。

String CUSTOM_ACTION = "com.example.YOUR_ACTION"; 

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

は、次に、あなたの活動

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

ののonCreateメソッドにBroadcastReceiverでカスタムIntentFilterと

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 
     } 
    } 
} 

レジスタの受信機をあなたの意図を受け取ることができ、onDestroy

で登録解除を忘れないでください
unregisterReceiver(myReceiver); 

p.s

クラスとコンポーネント間でデータを転送する方法はたくさんあります。あなたの目的によって異なります。
インテント付きブロードキャスト受信機は、サービスとアクティビティ間のデータ転送、およびアプリケーション間のデータ転送に適しています。

別の場所のデータにアクセスする必要がある場合は、別の方法があります。
データをディスクに保存する必要がある場合は、データベースが適しています。
RAMにデータを格納するには、別のクラスを使用して、このクラスをSingletonまたはApplicationクラスに格納します。

+0

マップアクティビティを読み込んでロードしようとするとクラッシュするようになりました –

+0

ブロードキャスト受信者からデータを取得してアクティビティで共有するにはどうすればよいですか?あなたはdayaを取得し、それがifにあるとしましょう。(アクション....そのデータを他のアクティビティとどうやって共有するのですか? –

+0

内部クラスはブロードキャストレシーバーをあなたのアクティビティに拡張することができます。外部クラスのメソッド –

関連する問題