第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

訪(fǎng)問(wèn)onCreate()中的視圖的NullPointerException

訪(fǎng)問(wèn)onCreate()中的視圖的NullPointerException

有只小跳蛙 2019-05-25 16:02:44
訪(fǎng)問(wèn)onCreate()中的視圖的NullPointerException這是針對(duì)StackOverflow上經(jīng)常發(fā)布的問(wèn)題的規(guī)范問(wèn)題。我正在關(guān)注一個(gè)教程。我使用向?qū)?chuàng)建了一個(gè)新活動(dòng)。我NullPointerException試圖在我的活動(dòng)中使用Views獲取方法時(shí)得到。findViewById()onCreate()活動(dòng)onCreate():@Overrideprotected void onCreate(Bundle savedInstanceState) {     super.onCreate(savedInstanceState);     setContentView(R.layout.activity_main);     View something = findViewById(R.id.something);     something.setOnClickListener(new View.OnClickListener() { ... }); // NPE HERE     if (savedInstanceState == null) {         getSupportFragmentManager().beginTransaction()                 .add(R.id.container, new PlaceholderFragment()).commit();     }}布局XML(fragment_main.xml):<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"     xmlns:tools="http://schemas.android.com/tools"     android:layout_width="match_parent"     android:layout_height="match_parent"     android:paddingBottom="@dimen/activity_vertical_margin"     android:paddingLeft="@dimen/activity_horizontal_margin"     android:paddingRight="@dimen/activity_horizontal_margin"     android:paddingTop="@dimen/activity_vertical_margin"     tools:context="packagename.MainActivity$PlaceholderFragment" >     <View         android:layout_width="100dp"         android:layout_height="100dp"         android:id="@+id/something" /></RelativeLayout>
查看完整描述

4 回答

?
繁星coding

TA貢獻(xiàn)1797條經(jīng)驗(yàn) 獲得超4個(gè)贊

該教程可能已過(guò)時(shí),嘗試創(chuàng)建基于活動(dòng)的UI,而不是向?qū)傻拇a首選的基于片段的UI。

視圖位于片段布局(fragment_main.xml)中,而不在活動(dòng)布局(activity_main.xml)中。onCreate()在生命周期中太早,無(wú)法在活動(dòng)視圖層次結(jié)構(gòu)中找到它,并null返回a。調(diào)用方法null會(huì)導(dǎo)致NPE。

首選的解決方案是將代碼移動(dòng)到片段onCreateView(),調(diào)用findViewById()膨脹的片段布局rootView

@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,
    Bundle savedInstanceState) {
  View rootView = inflater.inflate(R.layout.fragment_main, container,
      false);

  View something = rootView.findViewById(R.id.something); // not activity findViewById()
  something.setOnClickListener(new View.OnClickListener() { ... });

  return rootView;}

作為旁注,片段布局最終將成為活動(dòng)視圖層次結(jié)構(gòu)的一部分,并且可以通過(guò)活動(dòng)發(fā)現(xiàn),findViewById()但僅在片段事務(wù)運(yùn)行之后才能發(fā)現(xiàn)。待處理的片段事務(wù)在super.onStart()之后執(zhí)行onCreate()


查看完整回答
反對(duì) 回復(fù) 2019-05-25
?
慕無(wú)忌1623718

TA貢獻(xiàn)1744條經(jīng)驗(yàn) 獲得超4個(gè)贊

嘗試OnStart()方法,只需使用

View view = getView().findViewById(R.id.something);

或使用getView().findViewById方法聲明任何視圖onStart()

在視圖上聲明單擊偵聽(tīng)器 anyView.setOnClickListener(this);


查看完整回答
反對(duì) 回復(fù) 2019-05-25
?
慕森王

TA貢獻(xiàn)1777條經(jīng)驗(yàn) 獲得超3個(gè)贊

嘗試將訪(fǎng)問(wèn)視圖轉(zhuǎn)移到片段的onViewCreated方法,因?yàn)橛袝r(shí)當(dāng)您嘗試訪(fǎng)問(wèn)onCreate方法中的視圖時(shí),它們不會(huì)在此時(shí)呈現(xiàn),從而導(dǎo)致空指針異常。

 @Overridepublic void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
     View something = findViewById(R.id.something);
     something.setOnClickListener(new View.OnClickListener() { ... }); // NPE HERE

     if (savedInstanceState == null) {
           getSupportFragmentManager().beginTransaction()
            .add(R.id.container, new PlaceholderFragment()).commit();
    }
 }


查看完整回答
反對(duì) 回復(fù) 2019-05-25
  • 4 回答
  • 0 關(guān)注
  • 580 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)