簡體   English   中英

在多個活動之間引用靜態對象,而不是每次都使用捆綁包

[英]Reference static object between multiple activities instead of using a bundle each time

要將數據從一個活動傳遞到另一個活動,您需要將該數據放入捆綁包並按意圖傳遞:

Bundle bundle = new Bundle();
bundle.putString(“key”, “MyDataString”);
Intent a = new Intent(Sender.this, Receiver.class); 
a.putExtra(bundle); 
startActivity(a);

但是,說我有3個活動。 這些活動中的每一個都需要訪問同一收集對象:一組照片。

活動1需要在列表視圖中顯示照片

活動2需要以完全不同的布局顯示這些照片

活動3需要顯示一些照片,但也可以動態替換正在顯示的照片

結果:所有3個活動都需要共享相同的數據對象。

我是否需要在每個活動之間始終將對象作為捆綁傳遞,或者是否有辦法讓它只有一個實例且所有3個類都共享它?

您可以只創建自己的類,將其稱為會話。

然后像這樣實現它:

 * --------------------------
 * Description
 * --------------------------
 * This class is used to store variables only until the app is completely closed.
 * --------------------------
 * 
 */
public class Session
{
    //Variables of current instance of app.
   public static String var1     = "1234";
   public static ArrayList<String> photos = new ArrayList<String>();
}

然后在其他活動中,只需直接調用這些變量,如下所示:

String temp = Session.var1;

或設置它們

Session.var1 = "New Value";

要么

for (String temp : Session.photos)
{
    String photoURI = temp;
    //and so on ...
}

我一直在這樣做...當然,您不想將整個應用程序數據放在這里,但是在某些情況下確實可以節省一些時間。

實際上,您有一個abstract Activity (讓我們說BaseActivity ),然后使所有其他Activity擴展為此BaseActivity 您可以在abstract活動中使用通用變量和通用函數(例如:用於創建AlertDialogsProgressDialogs ,使用Intents啟動活動等)。 這樣,用於相同功能的代碼就更少了。 由於您的所有活動都是該父活動類的子類,因此它們都將能夠訪問BaseActivity定義的變量。

請參閱android中的示例, 如何創建自己的Activity並將其擴展? 取自同一問題的答案:

public abstract class BaseActivity extends Activity {
    String commonVariable;
    @Override
    public void onCreate(bundle) {
        super.onCreate(bundle);
        setContentView(getLayoutResourceId());
        commonVariable = "Hello";
    }

    protected abstract int getLayoutResourceId();
}

public class Activity1 extends BaseActivity {
    @Override
    public void onCreate(bundle) {
        super.onCreate(bundle);
        // do extra stuff on your resources, using findViewById on your layout_for_activity1
        Log.d("TAG", "Hey I can access the common variable. Its: "+commonVariable);
    }

    @Override
    protected int getLayoutResourceId() {
        return R.layout.layout_for_activity1;
    }
}

如果只有一個公共變量,則可以按照@Janpan的建議,繼續進行操作,並在那里創建一個class並定義static變量。 但是,這是一種設計選擇,根據您的情況,您將需要考慮隨着項目的發展,將來對您有什么好處。

暫無
暫無

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

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