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

我有一个可以正常工作的平板电脑应用程序,现在我也在尝试在手机上工作。在一个表上,屏幕上有两个片段,一个列表片段和一个详细信息片段。在电话上时,列表片段会出现,并在按下列表项时创建一个新活动。此活动仅在onCreate()方法中创建片段并将其提交到屏幕,如下所示。


// 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。


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


拉风的咖菲猫
浏览 568回答 3
3回答

不负相思意

将方法移至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

翻阅古今

您必须检查Android生命周期以了解为什么onAttach(...)函数上它为null。添加创建片段时调用的第一个函数是onAttach(),但实际上尚未创建任何视图。这就是为什么当您尝试在此调用中访问时返回null的原因。下一个函数是onCreate() ...但是还没有创建视图!调用的第三个函数是onCreateView(),在这里您必须指出哪个是附加到此片段的视图...。而且只有在此调用中,视图对象存在并且可以访问。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Android