gpt4 book ai didi

java - 我可以在自身内部存储 Activity 或 Fragment 的静态实例吗?

转载 作者:行者123 更新时间:2023-11-29 02:31:50 27 4
gpt4 key购买 nike

我需要更新基于 BroadcastReceiver 的 UI 元素。 self 引用存储自己创建的最后一个实例以发送更新有什么问题吗?

public class ExampleFragment extends Fragment {

private static ExampleFragment sExampleFragment = null;
private BroadcastReceiver mNetworkReceiver;
private TextView networkStateTextView;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

sExampleFragment = this;
mNetworkReceiver = new NetworkChangeReceiver();
registerNetworkBroadcast();
}

public void updateTextView(Boolean value) {
networkStateTextView.setText(String.valueOf(value));
}

public static void setNetworkConnectedState(boolean value){
sExampleFragment.updateTextView(value);
}

private void registerNetworkBroadcast() {
getContext().registerReceiver(mNetworkReceiver, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));
}

protected void unregisterNetworkChanges() {
try {
getContext().unregisterReceiver(mNetworkReceiver);
} catch (IllegalArgumentException e) {
e.printStackTrace();
}
}
}

我的广播接收器:

public class NetworkChangeReceiver extends BroadcastReceiver {

@Override
public void onReceive(final Context context, final Intent intent) {
try
{
Log.d("Network Available ", String.valueOf(isOnline(context)));
ExampleFragment.setNetworkConnectedState(isOnline(context));
} catch (NullPointerException e) {
e.printStackTrace();
}
}

private boolean isOnline(Context context) {
try {
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo netInfo = cm.getActiveNetworkInfo();
//should check null because in airplane mode it will be null
return (netInfo != null && netInfo.isConnected());
} catch (NullPointerException e) {
e.printStackTrace();
return false;
}
}
}

有没有办法在不让静态成员污染我的 Fragment 的情况下做到这一点?

最佳答案

        // Monitor network changed events
mNetworkReceiver = new NetworkChangeReceiver() {
@Override
public void onReceive(Context context, Intent intent) {

try
{
Log.d("Network Available ", String.valueOf(isOnline(context)));
///networkChanged(isOnline(context));

if(isOnline(context)){
connectedImageView.setBackground(ContextCompat.getDrawable(getContext(), R.drawable.ic_connected_yes));
connectedTextView.setText(R.string.connected_yes);
}else{
connectedImageView.setBackground(ContextCompat.getDrawable(getContext(), R.drawable.ic_connected_no));
connectedTextView.setText(R.string.connected_no);
}

} catch (NullPointerException e) {
e.printStackTrace();
}
}
};

关于java - 我可以在自身内部存储 Activity 或 Fragment 的静态实例吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49293051/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com