有没有在不启动 activity 的情况下发送额外的意图数据?
Is there anyway to send data in an intent put extra without starting an activity?
所以我从 Web 服务获取我的数据并使用 RecyclerView adapter.In RecyclerView.adapter 的 onBindviewholder 方法我想将数据传递给 MainActivity 中的 recyclerView 但也传递数据(项目) MyMapsActivity.The 是 onBindViewholder 有 setOnClickListener 和
setOnLongClickListener 作为正在使用的控件。有没有一种方法可以使用不启动 activity 的意图发送数据(项目),或者有没有一种方法可以在 onBindViewholder 方法中连接一个新按钮,因为当应用程序启动时会发生什么直接进入预期的 MyMapsActivity。有没有办法通过使用可以与 onBindViewholder 交互的新按钮来控制它,或者有没有办法在不启动 MyMapsActivity.Maybe 的情况下传递 intent.putExtra 我的理解是有缺陷的,但这是我的代码说明的方法和活动:
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);
}
您不需要调用 startAcivity 方法。
有用于与其他组件共享意图的 sendBroadcast 方法。
String CUSTOM_ACTION = "com.example.YOUR_ACTION";
Intent i = new Intent();
i.setAction(CUSTOM_ACTION)
intent.putExtra(ITEM_KEY,item);
context.sendBroadcast(intent);
然后您可以使用 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
}
}
}
将具有自定义 IntentFilter 的接收器注册到 activity
的 onCreate 方法中
IntentFilter filter = new IntentFilter(CUSTOM_ACTION);
registerReceiver(myReceiver, filter);
并且不要忘记在 onDestroy
中注销它
unregisterReceiver(myReceiver);
P.S
classES 和组件之间传输数据的方式有很多种。这取决于你的目的。
具有意图的广播接收器适用于服务和活动之间的数据传输以及应用程序之间的数据传输。
如果您需要访问不同位置的数据,还有其他方法。
如果数据需要存储在磁盘上,那么数据库是合适的。
要将数据存储在 RAM 中,您可以使用单独的 class 并将此 class 作为单例存储或存储到您的应用程序 class 中。
所以我从 Web 服务获取我的数据并使用 RecyclerView adapter.In RecyclerView.adapter 的 onBindviewholder 方法我想将数据传递给 MainActivity 中的 recyclerView 但也传递数据(项目) MyMapsActivity.The 是 onBindViewholder 有 setOnClickListener 和 setOnLongClickListener 作为正在使用的控件。有没有一种方法可以使用不启动 activity 的意图发送数据(项目),或者有没有一种方法可以在 onBindViewholder 方法中连接一个新按钮,因为当应用程序启动时会发生什么直接进入预期的 MyMapsActivity。有没有办法通过使用可以与 onBindViewholder 交互的新按钮来控制它,或者有没有办法在不启动 MyMapsActivity.Maybe 的情况下传递 intent.putExtra 我的理解是有缺陷的,但这是我的代码说明的方法和活动:
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);
}
您不需要调用 startAcivity 方法。 有用于与其他组件共享意图的 sendBroadcast 方法。
String CUSTOM_ACTION = "com.example.YOUR_ACTION";
Intent i = new Intent();
i.setAction(CUSTOM_ACTION)
intent.putExtra(ITEM_KEY,item);
context.sendBroadcast(intent);
然后您可以使用 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
}
}
}
将具有自定义 IntentFilter 的接收器注册到 activity
的 onCreate 方法中IntentFilter filter = new IntentFilter(CUSTOM_ACTION);
registerReceiver(myReceiver, filter);
并且不要忘记在 onDestroy
中注销它unregisterReceiver(myReceiver);
P.S
classES 和组件之间传输数据的方式有很多种。这取决于你的目的。
具有意图的广播接收器适用于服务和活动之间的数据传输以及应用程序之间的数据传输。
如果您需要访问不同位置的数据,还有其他方法。
如果数据需要存储在磁盘上,那么数据库是合适的。
要将数据存储在 RAM 中,您可以使用单独的 class 并将此 class 作为单例存储或存储到您的应用程序 class 中。