2016-10-06 71 views
-4

這是我的第一個android應用程序,所以也許這是一個愚蠢的問題。所以,請考慮我是否有任何錯誤。在android中使用「this」靜態方法

我正在構建一個與藍牙相關的應用程序。

我有一個方法,我MainActivity.java

public void showDeviceListDialog() { 
    BluetoothDeviceListDialog dialog = new BluetoothDeviceListDialog(this); 
    dialog.setOnDeviceSelectedListener(this); 
    dialog.setTitle("Paired Devices"); 
    dialog.setDevices(bluetoothSerial.getPairedDevices()); 
    dialog.showAddress(true); 
    dialog.show(); 
} 

我需要調用從另一個片段此方法。所以,當我調用這樣的方法時:MainActivity.showDeviceListDialog();它要求製作方法靜態。但是,當我提出這靜態我對我的方法得到的 「[dialog.setOnDeviceSelectedListener();]錯誤。

我已經閱讀了一些帖子,如thisthis,但我沒有得到有關我的問題的幫助。

我從我的片斷嘗試這樣做:

MainActivity mc = new MainActivity(); 
mc.showDeviceListDialog(); 

,但這正顯示出NullPointerException異常。

所以,請告訴我如何從我的片段調用它沒有這個錯誤。 謝謝。

+0

您可以使用接口作爲活動的回調。永遠不要'MainActivity mc = new MainActivity();' – Raghunandan

+0

你不能實例化你的活動 – Piyush

+0

你不能用'this'和'static'。你不應該在擴展'Activity'的類上使用'new' – Blackbelt

回答

1

A Fragment有一個getActivity()方法,該方法返回與Fragment關聯的Activity

因此,你可以調用從Fragment這種方法沒有使它static

getActivity().showDeviceListDialog(); 

EDIT(感謝user1506104的評論):

事實上,你必須投返回的ActivitygetActivity()MainActivity爲了調用該方法:

((MainActivity) getActivity()).showDeviceListDialog(); 

此我假定Fragment與該類型的Activity相關聯。

+0

中包含URL,因爲所討論的片段是具有'showDeviceListDialog()'的Activity的孩子,所以這應該工作。 – user1506104

+0

感謝您的回答@Eran。它剛剛工作! XD –

1

是指向當前實例的引用,因此是沒有SENCE在靜態方法 ... 和做這樣的事情

MainActivity mc = new MainActivity(); 

不是Android的方式要你創建活動... 您需要獲得活動,如致電getActivity();方法

+0

感謝您的評論 –

+1

沒有真正解決初始問題的解決方案,這是調用活動方法。 OP只是允許IDE將方法設爲靜態 –

相關問題