从活动创build片段时,getView返回null

我有一个工作的平板电脑应用程序,我现在正在尝试在手机上工作。 在一张桌子上,在屏幕上有两个片段,一个列表片段和一个细节片段。 在电话上显示列表片段,并在按下列表项目时创build新的活动。 这个活动只是在onCreate()方法中创build片段,并按如下方式提交给屏幕。

 // Place an DeallDetailsFragment as our content pane DealDetailsFragment f = new DealDetailsFragment(); getFragmentManager().beginTransaction().add(android.R.id.content, f).commit(); getFragmentManager().executePendingTransactions(); 

这是按预期工作,但是从这个活动中我需要告诉片段什么细节加载和显示。 在我的DealDetailsFragment类,我有一个updateDeal()方法更新内容如下。

 if (deal==null) { // could be null if user presses the loading deals list item before it loads return; } this.deal=deal; if (dealTitle==null) { // get the view objects only once holder = new ViewHolder(); holder.dealHeat=(TextView) getView().findViewById(R.id.dealDetails_heat_textView); holder.dealPrice=(TextView) getView().findViewById(R.id.dealDetails_price_textView); holder.dealRetailer=(TextView) getView().findViewById(R.id.dealDetails_retailer_textView); holder.dealTitle=(TextView) getView().findViewById(R.id.dealDetails_title_textView); holder.dealDesc=(TextView) getView().findViewById(R.id.dealDetails_desc_textView); holder.goToButton= (LinearLayout) getView().findViewById(R.id.dealDetails_goToDeal); holder.dealImage=(ImageView) getView().findViewById(R.id.dealDetails_imageView); holder.postedBy=(TextView) getView().findViewById(R.id.dealDetails_poster_textView); holder.datePosted=(TextView) getView().findViewById(R.id.dealDetails_date_textView); 

当应用程序在仅显示一个片段的电话上运行时, getView()返回null。

有任何想法吗? 不幸的是,网上没有很多的片段例子。

移动你的方法调用,在onCreateView执行,并使用你正在膨胀的视图来代替getView() 。 查看片段生命周期以获取更多信息: https : //developer.android.com/guide/components/fragments.html#Creating

getView()的文档解释了为什么它在onCreateView(LayoutInflater, ViewGroup, Bundle)返回之前返回null:

getView()获取片段布局的根视图(由onCreateView(LayoutInflater,ViewGroup,Bundle)返回的视图)(如果提供)。

https://developer.android.com/reference/android/app/Fragment.html#getView();

将方法移动到onCreateView()没有帮助me.so …创build一个全局variablesmView

  protected View mView; 

并在onCreateView()

  @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { Log.d(TAG, "oncreateView"); super.onCreateView(inflater, container, savedInstanceState); View view = inflater.inflate(R.layout.activity_secure_cloud_drive_folder, container, false); this.mView = view; return view; } 

并用mViewreplace所有的getView()

您必须检查Android生命周期以了解为什么onAttach(…)函数为null。

在创build片段时调用的第一个函数是onAttach() ,但实际上没有创build视图。 这就是为什么当你试图在这个调用中访问时返回null。

下一个函数是onCreate() …但是没有创build视图!!!!

被调用的第三个函数是onCreateView() ,在这里你必须指出哪个视图是附加在这个片段上的….只有在这个调用中,视图对象存在并且可以被访问。

阅读并了解整个生命周期。

问候

你可以通过将你的代码放在你应该覆盖的onViewCreated()方法中来解决这个问题。 不要忘记调用super()

它基本上是空的,因为你在视图被充气之前调用了getview() 。 创build一个View对象,并使用inflater填充,然后find你的UI元素看到下面的代码

  View view = inflater.inflate(R.layout.fragment_albumslist, container, false); TextView t= (TextView)view.findViewById(R.id.txtTest); t.setText(strtext); return view; 

因为onCreate()在onCreateView()之前被调用,不pipe你是否在onCreateView()中膨胀一个视图,你都不会通过onCreate()中的getView()获得任何东西,因为那时候onCreate()还没有被调用

Android生命周期