簡體   English   中英

壞與好習慣的實地訪問android

[英]Bad vs good practice field access android

在學習android(java)編碼的一些基礎知識時,我遇到了要訪問不同類中的多個UI字段(來自xml)的問題。 我看到可以通過在相關類中擴展Activity來解決此問題,但這是公認的編碼實踐嗎?


public class Example {

    TextView textview;        

    public Example(TextView textview) {
        this.textview = textview;
    }    
}

public class Example extends Activity {

    TextView textview;        

    public Example() {
        this.textview = (TextView)findViewById(R.id.<xml id>);
    }    
}

當元素數量增加時,第二種選擇對我來說似乎更干凈。 顯然,並非每個課程本身都被視為一項活動。 因此,如果還有其他方法或首選版本,請在注釋中說明原因。

重復使用預定義的布局文件絕對沒有害處。 僅將活動擴展為訪問布局是一種非常糟糕的做法。 引入了使用諸如MVC,MVP和MVVM之類的體系結構分離代碼的概念。 這些有助於編寫和維護大型代碼庫。

您可以在構造函數中獲取上下文的引用(在您的情況下為活動),然后使用上下文的引用(活動)可以訪問字段。 完成后,您需要注意使此引用為空,否則您將持有對Context的引用,這可能導致活動泄漏。 我建議您使用Activity的WeakReference,並在需要時僅檢查所包含的Activity引用是否不為null。

第二種方法不好,因為您的課程實際上不是實際活動(您只是擴展到訪問字段),所以偏愛Composition總是更好。

Activity類不應用於與顯示UI不同的目的,也不應使用構造函數創建Activity類。 如果您需要從另一個類(可能是Utility類)訪問資源,則將Context傳遞給它,並使用它通過id檢索資源。

您可以將上下文(您的用例的活動參考)作為輔助類函數中的參數發送來訪問資源。

通常將活動類擴展為顯示為UI的一部分。

或者,它可以用作其他ActivityClass的基類。 應該將基類標記為抽象,以指定它將僅由其他ActivityClass擴展,您也無需在AndroidManifest文件中提及您的基類。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM