私のアプリには、3つのフラグメントタブがあるアクションバーがあります。 2番目のフラグメントでは、BroadcastReceiverを登録および登録解除します。 onPause
でレシーバーの登録を解除し、onCreateView
およびonResume
で登録します。
getActivity().registerReceiver(this.batteryInfoReceiver, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
そして
getActivity().unregisterReceiver(batteryInfoReceiver);
1)同じ受信者を2回(onCreateViewとonResumeで)登録しても大丈夫ですか?(無害ですか?
2)受信者をonResumeに登録するだけで十分ですか?
Fragments
の life-cycle を見てください:
onCreateView():フラグメントがユーザーインターフェイスを初めて描画するとき、システムはこれを呼び出します。フラグメントのUIを描画するには、フラグメントのレイアウトのルートであるこのメソッドからビューを返す必要があります。フラグメントがUIを提供しない場合、nullを返すことができます。
onResume():フラグメントは実行中のアクティビティに表示されます
onPause():これは通常、現在のユーザーセッションを超えて永続化する必要がある変更をコミットする場所です(ユーザーが戻ってこない可能性があるため)。
結論:
onResume()
はビュー階層を処理するため、onPause()
内でのみレシーバーを登録し、onCreateView()
内で登録解除することをお勧めしますのみ。受信機とは関係ありません。したがって、有害ではありませんが、確かに役に立たないのです。
お役に立てばと思います!!
ここに私のために働くコードがあります:
内部レイアウト:
<Button
Android:id="@+id/button2"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:onClick="sendInternalBroadcast"
Android:text="Broadcast"/>
フラグメントレイアウト:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:orientation="vertical"
Android:gravity="center">
<TextView
Android:layout_height="wrap_content"
Android:layout_width="wrap_content"
Android:text="Fragment One"
Android:id="@+id/fragmentoneTextView1"/>
</LinearLayout>
メインアクティビティ内:
public void sendInternalBroadcast(View view)
{
Intent intent = new Intent();
intent.setAction("com.codingbadly.stefanronnkvist.simplebroadcastreceiver.setup");
intent.putExtra("From", "sendInternalBroadcast");
sendBroadcast(intent);
}
断片:
import Android.app.*;
import Android.content.*;
import Android.os.*;
import Android.view.*;
import Android.widget.*;
public class FragmentOne extends Fragment
{
View view;
Context _context;
PendingIntent pi;
BroadcastReceiver br;
AlarmManager am;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
view = inflater.inflate(R.layout.fragmentone, container, false);
setup();
return view;
}
@Override
public void onAttach(Context context)
{
super.onAttach(context);
_context = context;
}
@Override
public void onDestroyView()
{
super.onDestroyView();
_context.unregisterReceiver(br);
}
private void setup()
{
br = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent i)
{
TextView tv = (TextView)view.findViewById(R.id.fragmentoneTextView1);
tv.setText("onReceive");
}
};
_context.registerReceiver(br, new IntentFilter("com.codingbadly.stefanronnkvist.simplebroadcastreceiver.setup"));
pi = PendingIntent.getBroadcast(_context, 0, new Intent("com.codingbadly.stefanronnkvist.simplebroadcastreceiver.setup"), 0);
am = (AlarmManager)(_context.getSystemService(Context.ALARM_SERVICE));
}
}
幸運..ステファン・ロンクビスト
OnResume Register:
context.registerReceiver(receiver,IntentFilter(BroadCastAction.action_success))
onPause unRegister:
context.unregisterReceiver(mContactBroadCastReceiver);