【Android開發技巧】Fragment中獲取Context物件的兩種方法
我們在使用Fragment的時候經常需要傳遞Context型別的引數,【Android用的比較多的就是下面幾個導航按鈕,點選切換fragment(之前Android studio2.0以前是可以new fragment(context)時傳遞Context,但後來升級了studio2.1.2之後,new fragment物件時傳遞context會報錯,不得不想別的法子了)】而Fragment自己又不是一個Context型別的物件,於是我們有下面兩種方法獲取Context物件。
一、兩種方法介紹
1.this.getActivity()(可以不寫this.)
在Fragment中直接呼叫getActivity()方法,可以直接得到Fragment依附的Activity,而Activity是一個Context型別的物件。
如下自己寫一個MyApplication類繼承Application,通過getInstance獲取一個Application型別的物件,也是Context物件。
public class MyApplication extends Application { private static MyApplication mInstance;/** * 獲取context * @return */ public static Context getInstance() { if (mInstance == null) { mInstance= new MyApplication(); } return mInstance; } }
二、兩種方法比較
1.this.getActivity()
- 優點:不需要寫MyApplication類
-
缺點:
Fragment
很容易被銷燬,呼叫getActivity()
方法會報空指標錯誤(注意:並不是getActivity()
返回值為null
,而是this.getActivity()
中的this
,也就是Fragment
自己是null
,因為它已經被銷燬了)
2.獲取Application物件
-
優點:不會遇到類似
this.getActivity()
的空指標問題 -
缺點:某些情況下的
Context
Activity
,特別是例項化Dialog
等需要依附於一個Activity
的視覺化的物件時傳參必須是Activity
物件(Toast
是Android的一種通知機制,不需要依附於Activity
)
三、兩全其美的解決方案
1.MyApplication是一定要寫的
2.寫一個如下的BaseFragment類:所有的Fragment
都繼承這個BaseFragment
,直接通過getContext()
方法即可得到Context
物件,當然例項化Dialog
等需要依附於Activity
的物件時,還是老老實實的getActivity()
吧
public class BaseFragment extends Fragment { private Activity activity; public Context getContext() { if (activity == null) { return MyApplication.getInstance(); } return activity; } @Override public void onAttach(Context context) { super.onAttach(context); activity = getActivity(); } }
相關推薦
【Android開發技巧】Fragment中獲取Context物件的兩種方法
我們在使用Fragment的時候經常需要傳遞Context型別的引數,【Android用的比較多的就是下面幾個導航按鈕,點選切換fragment(之前Android studio2.0以前是可以new fragment(context)時傳遞Context,但後來升級了studio2.1.2之後,new
【Android開發技巧】Android7.0新簽名對多渠道打包的影響
老簽名多渠道打包原理 前言 由於Android7.0釋出了新的簽名機制,加強了簽名的加固,導致在新的簽名機制下無法通過美團式的方式再繼續打多渠道包了。不過在說新的簽名機制對打包方案的 影響和為什麼會影響我們原有的打包機制之前,需要先簡單理解下打包原理和簽名
【Qt開發】Qt中顯示影象的兩種方法對比
在Qt中處理圖片一般都要用到QImage類,但是QImage的物件不能夠直接顯示出來,要想能看到圖片,初步發現有兩種方法。 一、QImage轉QPixmap,然後用QLabel::setPixmap() image=new QImage("D:/Temp/XX.jpg
Spring中獲取bean的兩種方法
第一種採用註解方法 註解的方法比較簡單,不在進行詳細介紹,這邊主要將的是另外一種方法,當通過註解獲取不到bean時,可以採用根據上下文獲取。 第二種上下文獲取bean @Component public class SpringBeanUtil implements Appli
python中獲取cookie的兩種方法
第一種是利用selenium+phantomjs無介面瀏覽器的形式訪問網站,再獲取cookie值:# 匯入模組 from selenium import webdriver driver=webdri
【Android開發-5】界面裝修,五大布局你選誰
比例 技術分享 article 嵌套 content java lin layout mark 前言:假設要開一家店,門店裝修是非常重要的事情。有錢都請專門的建築設計公司來設計裝修,沒錢的僅僅能自己瞎折騰。好不好看全憑自己的感覺。像Android開發。在移動端大家看到的
【轉】python中獲取python版本號的方法
n) https href light nor body true print brush 原文 python3 #!/usr/bin/python # 第1種方法 import platform print(platform.python_version())
【C# 開發技巧】如何防止程序多次運行
false name classname 發現 mic RR www. nvi lib 一、引言 最近發現很多人在論壇中問到如何防止程序被多次運行的問題的,如: http://social.msdn.microsoft.com/Forums/zh-CN/6398fb10-e
【Android開發經驗】android:windowSoftInputMode屬性具體解釋
中一 mtk wid water ren 而是 orien 表示 不能 本文章來自CSDN博客:http://blog.csdn.net/zhaokaiqiang1992。轉載請註明地址! 在前面的一篇文章中,簡單的介紹了一下怎樣實現軟鍵盤不自己主動彈出,使
【C# 開發技巧】 Application.DoEvents( ) 使用筆記
該方法可以處理當前佇列的訊息,比如一個for迴圈 5000次 向TextBox中追加文字,那肯定會假死一會兒的。 此時便可使用Application.DoEvents()來處理佇列的資訊。 簡單說下使用Application.DoEvents() 和 不使用Application.DoEv
【android開發筆記】如何讓ImageButton去掉白色邊框和讓ImageButton具有點選效果
這是我從網上學來的,怕忘記,遂記起來 如何讓ImageButton去掉白色邊框 android:background="#00000000" //把背景變透明放在那一段程式碼裡呢?放在layout裡面的.xml檔案裡 如: <ImageButton a
【Android開發日記】Popupwindow 完美demo
Popupwindow 完美demo實現 圖示: 關鍵程式碼說明:
Android開發技巧——去掉TextView中autolink的下劃線
我們知道,在佈局檔案中設定textview的autolink及其型別,這時textivew上會顯示link的顏色,並且文字下面會有一條下劃線,表示可以點選。而在我們在點選textview時,應用將根據我們所設定的型別跳轉到對應的介面。但是有時,我們因介面需求,需要去掉介面上
【Android 開發入門】android studio 控制檯列印輸出日誌
有些情況下,不方便使用斷點的方式來除錯,而是希望在控制檯列印輸出日誌,使用過Eclipse的同學都知道Java可以使用 System.out.println(""); 來在控制檯列印輸出日誌,但是在android studio中卻是不行的,還是有差別的,那應該用什麼呢?and
【Android開發bug】Dropping event due to no window focus
問題描述: 使用android自帶視訊播放器播放視訊,按返回鍵不能退出這個介面(Android_4.4.4系統); Log如下: 11-25 16:37:31.498: W/ViewRootImpl(27708): Dropping event due to no win
【Android 開發入門】使用Android模擬器預覽除錯程式
在上篇“走進Android開發的世界,HelloWorld”,我們建立了一個Android 專案 HelloWorld,並演示瞭如何通過USB連線手機檢視執行效果;而如果沒有手機或沒有對應型號的手機,又
【Android開發經驗】APP的快取檔案到底應該存在哪?看完這篇文章你應該就自己清楚了
只要是需要進行聯網獲取資料的APP,那麼不管是版本更新,還是圖片快取,都會在本地產生快取檔案。那麼,這些快取檔案到底放在什地方合適呢?系統有沒有給我們提供建議的快取位置呢?不同的快取位置有什麼不同呢?今天這篇文章就是主要來說明這個問題的。 首先,我們要知道,在A
【Android 開發入門】我為什麼要在Android找工作越來越難的時候開始學習它
首先,Android是不是真的找工作越來越難呢?這個可能是大家最關心的。這個受大的經濟環境以及行業發展前景的影響,同時也和個人因素有關。2016-08-26近期一方面是所在的公司招聘Java開發人員很難招到合適的,投簡歷的人很少;而另一方面,經常聽身邊的人說Android、i
【Android開發經驗】LayoutInflater——80%的Android程式設計師對它並不瞭解甚至錯誤使用
這個標題起的有點誇張哈,但是LayoutInflater這個類的一些用法,在Android開發者使用的過程中,確實存在著一些很普遍的誤區,最起碼我研究的這麼多小專案的原始碼,基本上都在錯誤的使用這個類。今天,看到了一篇文章講LayoutInflater的用法,瞬間感覺自己對
Android開發,在Fragment中,隱藏或關閉軟鍵盤(虛擬鍵盤)的方法
網上可以搜到各種方法,實際測試中,我的開發用機中,僅僅下面這個方法有效,記錄一下。 //隱藏虛擬鍵盤 public static void HideKeyboard(View v)