为了账号安全,请及时绑定邮箱和手机立即绑定

从活动创建片段后,getView返回null

从活动创建片段后,getView返回null

拉风的咖菲猫 2019-12-03 16:18:04
我有一个可以正常工作的平板电脑应用程序,现在我也在尝试在手机上工作。在一个表上,屏幕上有两个片段,一个列表片段和一个详细信息片段。在电话上时,列表片段会出现,并在按下列表项时创建一个新活动。此活动仅在onCreate()方法中创建片段并将其提交到屏幕,如下所示。// Place an DeallDetailsFragment as our content paneDealDetailsFragment 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。有任何想法吗?不幸的是,在线上没有很多片段示例。
查看完整描述

3 回答

?
不负相思意

TA贡献1777条经验 获得超10个赞

将方法移至onCreateView()无济于事。所以...创建一个全局变量mView


 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;

}

然后getView()用mView


查看完整回答
反对 回复 2019-12-03
?
翻阅古今

TA贡献1780条经验 获得超5个赞

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


添加创建片段时调用的第一个函数是onAttach(),但实际上尚未创建任何视图。这就是为什么当您尝试在此调用中访问时返回null的原因。


下一个函数是onCreate() ...但是还没有创建视图!


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


查看完整回答
反对 回复 2019-12-03
  • 3 回答
  • 0 关注
  • 567 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信