當wifi關閉時,我為偵聽器開發了一個類,并撰寫了一個警報對話框來顯示一條訊息。現在我專門用一個類來顯示每個類中的訊息,但我無法解決錯誤。
public class Messages extends AppCompatDialogFragment {
private String message;
public Messages(String message){
this.message = message;
}
@NonNull
@Override
public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setTitle("Warning!!!")
.setMessage(this.message)
.setPositiveButton("ok", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
});
return builder.create();
}
}
public class NetworkChangeListener extends BroadcastReceiver {
private static final String CONNECTION_WIFI_OFF ="WIFI OFF.";
@Override
public void onReceive(Context context, Intent intent) {
if(ConnectivityManager.CONNECTIVITY_ACTION.equals(intent.getAction())){
Messages messages = new Messages(CONNECTION_WIFI_OFF);
messages.show(getSupportFragmentManager(),"messages");
}
}
}
}
我換messages.show(getSupportFragmentManager(),"messages");了messages.show(messages.getChildFragmentManager(),"messages");,但它不起作用。我收到此錯誤:
java.lang.RuntimeException: Error receiving broadcast Intent { act=android.net.conn.CONNECTIVITY_CHANGE flg=0x4000010 (has extras) } in com.example.connectivity.NetworkChangeListener@44fa736
at android.app.LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java:891)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
Caused by: java.lang.IllegalStateException: Fragment Messages{f08eacf} (69334c8a-e786-46b5-bf7a-61a6b901b9d5) has not been attached yet.
at androidx.fragment.app.Fragment.getChildFragmentManager(Fragment.java:1075)
at com.example.connectivity.NetworkChangeListener.onReceive(NetworkChangeListener.java:49)
at android.app.LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java:881)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
uj5u.com熱心網友回復:
試試這個,你應該只更換getSupportFragmentManager()同messages.getChildFragmentManager()
public class Messages extends AppCompatDialogFragment {
private String message;
private Context mContext;
public Messages(String message,Context context){
this.message = message;
mContext = context;
}
@NonNull
@Override
public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setTitle("Warning!!!")
.setMessage(this.message)
.setPositiveButton("ok", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
});
return builder.create();
}
}
public class NetworkChangeListener extends BroadcastReceiver {
private static final String CONNECTION_WIFI_OFF ="WIFI OFF.";
@Override
public void onReceive(Context context, Intent intent) {
if(ConnectivityManager.CONNECTIVITY_ACTION.equals(intent.getAction())){
Messages messages = new Messages(CONNECTION_WIFI_OFF);
messages.show(messages.getChildFragmentManager(), "messages");
}
}
}
uj5u.com熱心網友回復:
為了訪問FragmentManager片段本身必須附加到活動。您只是在創建片段,但它并未在任何地方使用和顯示。它只是無用的物件。
您需要首先MessagesFragment在活動中顯示 Messages 片段(請命名),然后您可以在其中運行廣播接收器并將其系結到它的生命周期
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/311562.html
標籤:安卓
下一篇:如何在顫振中創建雙復選框
