不明白为什么字符串值突然变成空?

Can't understand why string value turns to null suddenly?

她的是我的密码

 public static class DetailFragment extends Fragment {
        private String forecastData;

        private static final String LOG_TAG = DetailFragment.class.getSimpleName();

        private static final String FORECAST_SHARE_HASHTAG ="#SunshineApp";

        public DetailFragment() {

        }

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

        }

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                 Bundle savedInstanceState) {
           View rootView = inflater.inflate(R.layout.fragment_detail, container, false);
            //receive forecast data from the ForeCast Fragment
            Intent intent=getActivity().getIntent();
            forecastData=intent.getStringExtra(Intent.EXTRA_TEXT);
            Log.v(LOG_TAG,"data is "+forecastData);
            TextView textView=(TextView)rootView.findViewById(R.id.detail_text);
            textView.setText(forecastData);

            return rootView;
        }

        @Override
        public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
            super.onCreateOptionsMenu(menu, inflater);
            inflater.inflate(R.menu.menu_detailfragment,menu);

            MenuItem menuItem=menu.findItem(R.id.action_share);
            // Get the provider and hold onto it to set/change the share intent.
            ShareActionProvider mShareActionProvider =
                     (ShareActionProvider) MenuItemCompat.getActionProvider(menuItem);

            // Attach an intent to this ShareActionProvider.  You can update this at any time,
            // like when the user selects a new piece of data they might like to share.
            if (mShareActionProvider!= null ) {
                mShareActionProvider.setShareIntent(createShareIntent());

            }
            else
            {
                Log.v(LOG_TAG,"Share Action Provider is null");
            }
        }
        public  Intent createShareIntent()
        {
            Log.v(LOG_TAG,"data is "+forecastData);
            Intent intent=new Intent(Intent.ACTION_SEND);
            intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
            intent.setType("text/plain");
            intent.putExtra(Intent.EXTRA_TEXT,forecastData+DetailFragment.FORECAST_SHARE_HASHTAG);
            Log.v(LOG_TAG,"data is "+forecastData);
            return  intent;
        }

我绝对确定 Intent 已正确触发,因为我可以与其他应用程序共享并且它有效,如果你看到下面的日志就清楚了

01-04 18:36:02.370    6121-6121/com.example.droid.sunshine V/DetailFragment﹕ in optionMenu method data is null
01-04 18:36:02.380    6121-6121/com.example.droid.sunshine V/DetailFragment﹕ in create intent data is null
01-04 18:36:02.380    6121-6121/com.example.droid.sunshine V/DetailFragment﹕ in create intent data is null
01-04 18:36:02.650    6121-6121/com.example.droid.sunshine V/DetailFragment﹕ in view method data is Wed, Jan 7 - Clear - 27/24

这是为什么,我认为 OnCreate() 视图方法在 OnCreateOptionsMenu() 之前被调用 ?我该怎么做才能纠正这个问题?

这是一个想法:

  • 根据您的日志,onCreateOptionsMenu() 方法首先显示输出,只有最后一个来自 onCreateView()。这意味着 onCreateOptionsMenu()onCreateView 之前被调用,这可以解释为什么一切都是空的。

  • 尝试将 setHasOptionsMenu(true) 移动到其他地方,也许在构造函数中 这应该确保在 onCreateonCreateView 之后调用 onCreateOptionsMenu()。试试吧。

恕我直言,您应该将代码从 onCreateView() 移至 onActvivityCreated()。

onCreateView 用于 return 视图。

onActivityCreated 表示关联的 activity 已完成其方法 onCreate() 并已设置。