2016-01-21 246 views
1

我一直在搜索互聯網,但無法獲得我需要的正確答案。我是Android新手,請提供詳細的答案。訪問其他java類的片段

我有一個從用戶獲取一些數據的片段,例如:名稱,職業等。每獲取一次數據,我都想使用GSON將其存儲到sharedPreferences中。基於搜索,我需要構建一個普通的Java用戶類並傳遞該對象(Android - save Object to SharedPreferences and get it anywhere in the app)。

  1. 所以我的問題是,碎片可以訪問其他常規的java類函數嗎?

    class UserFragment extends Fragment { 
    
    // get the data from editText 
    
    User newUser = new User("Tom"); 
    newUser.setOccupation("Programmer"); 
    
    //etc 
    
    } 
    
  2. 片段是否可以實例化一個類並設置變量?

  3. 如果對於1和2,我們在哪裏添加用戶類java文件,與另一個文件夾的片段實現相同的文件,然後包含它?

我只是提供了一個用戶爲例,一般,但我想答案知道1個2

感謝

回答

0
  1. 是Fragment對象可以實例化另一個類的對象。
  2. 是的,它也可以在該對象上設置變量和調用函數。
  3. 完全由你決定。如果該類很小並且非常局部於片段類,則可以在Fragment類中創建該類。如果您希望可以在其他地方訪問它,或者使其更加模塊化,則可以使用不同的軟件包名稱或相同的名稱來創建它。
+0

是否有可能提供一個示例或鏈接顯示它?我想知道應該放置哪些Java類,以及它應該如何包含?我可以只添加一個包並添加這些類並對該路徑執行導入? –

+0

如果您使用Android Studio,這應該是非常微不足道的。只需右鍵單擊片段類所在的文件夾,即可創建新的Java類,並將其命名。現在回到你的Fragment類中,如果你嘗試編寫代碼,實例化新創建的類,它會提示自動導入。 :) 您可以在與Android Studio捆綁的幾乎所有Android教程中看到這一點。 –

+0

感謝您的幫助! –

0

嗨,下面是你的問題的解決方案和澄清。首先我想清楚Fragment是一個具有生命週期方法的類。通過生命週期方法,我的意思是根據應用程序或活動生命週期來調用方法,就像在前臺,可見和後臺時一樣。以下是你的問題的答案。

  1. 如果您有一個引用,您可以訪問類的常規方法。

    public class YourFragment extends Fragment { 
    
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        MyClass class = new MyClass(); 
    } 
    
    @Override 
    public void onStart() { 
        super.onStart(); 
        String data = retrieveData(); 
    } 
    String retrieveData() { 
        return data; 
    } 
    } 
    
  2. 是一個片段實例化一個類和設置變量,如果你有一個參考。

  3. 好吧,現在的主要部分。您可以調用方法並在生命週期方法內的任何地方實例化一個類。但我建議在onCreate()方法或其上的任何生命週期方法(如onAttach())中實例化一個對象。這是因爲2點以下。

    • 如果您不知道,通過調用new MyClass()創建一個對象會佔用資源,並且對象創建過程也很耗時。因此,如果在onResume()或onStart()方法中調用它們,那麼當片段從可見狀態轉移到焦點時(前臺調用onResume())並從後臺調用可見(onStart()被調用)時,將創建這些對象狀態。

    • 當另一個應用程序進入焦點時(這會導致片段在您的應用程序進入前臺時調用onResume()或onStart())或我們的應用程序從背景移動到可見狀態時(onStart()所謂的)。所以每當發生這種情況時就創建對象。

    • 但另一方面,如果您在onCreate()或其上方的生命週期方法內創建它,則只有在碎片被銷燬並重新創建時纔會創建對象。

    • 此外,如果你想調用上述方法實例化的類的方法,你可以從onCreate()之下的任何生命週期方法調用它,就像onStart()一樣(如果你想在用戶使用之前顯示結果你的片段)或onResume()(如果你想在用戶看到它後顯示結果),這是你自己做的。

    • 另外在我上面的示例中,我從onStart()調用retrieveData()方法,並且從生命週期方法的外部寫入該方法。這僅僅是一個例子。你可以這樣做。但是您必須根據您的需要在生命週期方法內調用這些方法。

    • 最後,這裏是一個鏈接,可以詳細瞭解片段的生命週期方法。 Learn About Fragment LifeCycle

我希望這有助於你找到一個解決方案。謝謝。