从活动创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; }
并用mView
replace所有的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 AccountManager在每个App / UID基础上存储OAuth令牌吗?
- 不针对最新版本的Android
- 如何在android的webview中播放video?
- 以编程方式向recyclerview添加一个新项目?
- android.graphics.drawable.ColorDrawable不能转换为android.support.v7.widget.RoundRectDrawableWithShadow
- EditText的首字母大写
- 如何在固定的时间间隔后重复执行Async任务
- 从Java代码中指定DIP尺寸的正确方法是什么?
- Android在WebView中调用JavaScript函数