无论如何在没有开始活动的情况下发送额外的意图数据?

时间:2017-08-12 20:39:59

标签: java android android-intent android-recyclerview broadcastreceiver

所以我从Web服务获取数据并使用RecyclerView适配器。在RecyclerView.adapter的onBindviewholder方法中,我想将数据传递给MainActivity中的recyclerView,但也将数据(项目)传递给MyMapsActivity。事情是onBindViewholder有setOnClickListener和 setOnLongClickListener作为正在使用的控件。有没有办法使用不启动活动的意图发送数据(项目),或者有没有办法在onBindViewholder方法中连接新按钮,因为当应用程序启动时会发生什么,直接进入MyMapsActivity这是预料之中的。有没有办法通过使用一个可以与onBindViewholder交互的新按钮来控制它,或者有一种方法来传递intent.putExtra而不启动MyMapsActivity.Maybe我的理解是有缺陷的,但这里是我的方法和活动的代码:

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

}

我的地图方法:

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


} 

1 个答案:

答案 0 :(得分:0)

您无需调用 startAcivity 方法。 有sendBroadcast方法可以将意图分享给其他组件。

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

然后您可以通过BroadcastReceiver

接收您的意图
IntentFilter filter = new IntentFilter(CUSTOM_ACTION);
registerReceiver(myReceiver, filter);

将带有自定义IntentFilter的接收器注册到您活动的onCreate方法

unregisterReceiver(myReceiver);

不要忘记在onDestroy中取消注册

null

P.S

在类和组件之间传输数据的方法有很多种。这取决于你的目的 具有意图的广播接收器适用于服务和活动之间的数据传输以及应用之间的数据传输。

如果您需要访问来自不同地方的数据,那么还有其他方法 如果数据需要存储在磁盘上,那么数据库是合适的 要将数据存储在RAM中,您可以使用单独的类并将此类存储为Singleton或存储到Application类中。