有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java我可以在其内部存储活动或片段的静态实例吗?

我需要根据广播接收器更新UI元素。以自引用方式存储为自己创建的最后一个实例以向其发送更新是否有问题

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;
        }
    }
}

有没有办法做到这一点而不让静态成员污染我的片段


共 (1) 个答案

  1. # 1 楼答案

            // 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();
                    }
                }
            };