[英]Send data from Adapter to broadcast receiver and receive in fragment
從發送數據到接收器並獲取片段
我想接收從適配器傳遞過來的數據,但它甚至沒有被調用
接收器類(該類在Fragement中)
public class DataReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
try {
if (intent != null) {
Category category = (Category) intent.getSerializableExtra("category");
Log.e("data", category.getName());
}
} catch (Exception e) {
Log.e("catch", e.toString());
}
}
}
我在下面的片段中創建了接收器,並在此處注冊和注銷了接收器。
AddServiceFragment類(其中有接收器)
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
bindViews();
dataReceiver = new DataReceiver();
filter = new IntentFilter("action");
}
@Override
public void onStart() {
super.onStart();
getActivity().registerReceiver(dataReceiver, filter);
}
public void onPause() {
// TODO Auto-generated method stub
super.onPause();
getActivity().unregisterReceiver(dataReceiver);
}
@Override
public void onResume() {
// TODO Auto-generated method stub
super.onResume();
getActivity().registerReceiver(dataReceiver, filter);
}
@Override
public void onDestroy() {
super.onDestroy();
getActivity().unregisterReceiver(dataReceiver);
}
我正在使用以下代碼將數據發送到接收器
適配器代碼
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent in = new Intent(context, AddServiceFragment.DataReceiver.class);
in.setAction("action");
in.putExtra("category", category);
context.sendBroadcast(in);
}
});
您使用的是錯誤的方式。 請檢查下面的示例代碼。
片段類中的代碼:
@Override
public void onResume() {
getActivity().registerReceiver(mReceiverLocation, new IntentFilter("data_action"));
super.onResume();
}
@Override
public void onPause() {
getActivity().unregisterReceiver(mReceiverLocation);
super.onPause();
}
private BroadcastReceiver mReceiverLocation = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
try {
Category category = (Category) intent.getSerializableExtra("category");
Log.e("data", category.getName());
} catch (Exception e) {
e.printStackTrace();
}
}
};
從適配器類調用:
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent in = new Intent("data_action");
in.putExtra("category", category);
context.sendBroadcast(in);
}
});
看看以下內容: https : //developer.android.com/training/basics/fragments/communicating.html您可以通過主機活動在片段之間進行通信。
通常,您會希望一個Fragment與另一個Fragment進行通信,例如,根據用戶事件更改內容。 所有片段到片段的通信都是通過關聯的活動完成的。 兩個片段永遠不要直接通信。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.