簡體   English   中英

在活動之間傳遞自定義對象?

[英]Passing custom objects between activities?

如何在android中的活動之間傳遞自定義對象? 我知道捆綁包,但我似乎看不到其中的任何功能。 誰能告訴我一個很好的例子?

您應該實現Parcelable 接口

鏈接到文檔

使用 Parcelable 接口,您可以將自定義 java 對象傳遞到意圖中。

1) 為您的類實現 Parcelable 接口,例如:

class Employee implements Parcelable
{
}

2)將 Parcelable 對象傳遞到意圖中,例如:

Employee mEmployee =new Employee();
Intent mIntent = new Intent(mContect,Abc.class);
mIntent.putExtra("employee", mEmployee);
startActivity(mIntent);

3) 將數據放入新的 [Abc] Activity 中,例如:

Intent mIntent  = getIntent();
Employee mEmployee  = (Employee )mIntent.getParcelableExtra("employee");

一個Parcel解決您的問題。

Parcel視為原始類型(long、String、Double、int 等)的“數組”(隱喻)。 如果您的自定義類僅由基本類型組成,則更改您的類聲明,包括implements Parcelable

您可以毫無困難地通過 Intent 傳遞 Parcelable 對象(就像發送原始類型對象一樣)。 在這種情況下,我有一個名為FarmData的可打包自定義類(由 longs、strings 和 doubles 組成),我通過意圖從一個活動傳遞到另一個活動。

    FarmData farmData = new FarmData();
// code that populates farmData - etc etc etc
    Intent intent00 = new Intent(getApplicationContext(), com.example.yourpackage.yourclass.class);
    intent00.putExtra("farmData",farmData);
    startActivity(intent00);    

但檢索它可能很棘手。 接收到 Intent 的 Activity 將檢查是否與 Intent 一起發送了一個額外的包。

    Bundle extras = getIntent().getExtras();
    FarmData farmData = new FarmData();
    Intent intentIncoming = getIntent();
    if(extras != null) {
        farmData = (FarmData) intentIncoming.getParcelableExtra("farmData");// OK
    }

給定一個在整個對象樹中實現 Serializable 的對象 PasswordState,您可以將此對象傳遞給另一個活動,如下所示:

private void launchManagePassword() {
    Intent i= new Intent(this, ManagePassword.class); // no param constructor
    PasswordState outState= new PasswordState(lengthKey,timeExpire,isValidKey,timeoutType,"",model.getIsHashPassword());
    Bundle b= new Bundle();
    b.putSerializable("jalcomputing.confusetext.PasswordState", outState);
    i.putExtras(b);
    startActivityForResult(i,REQUEST_MANAGE_PASSWORD); // used for callback
}

在活動之間傳遞對象或使對象對所有應用程序通用的一種簡單方法是創建一個擴展應用程序的類。

下面是一個例子:

public class DadosComuns extends Application{

    private String nomeUsuario="";

    public String getNomeUsuario() {
        return nomeUsuario;
    }

    public void setNomeUsuario(String str) {
        nomeUsuario = str;
    }
}

在所有其他活動中,您只需要實例化一個對象“DadosComuns”,聲明為全局變量。

private DadosComuns dadosComuns;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


    //dados comuns
    dadosComuns = ((DadosComuns)getApplicationContext());

    dadosComuns.setNomeUsuario("userNameTest"); }

您實例化的所有其他活動dadosComuns = ((DadosComuns)getApplicationContext()); 你可以訪問getNomeUsuario() == "userNameTest"

在你的AndroidManifest.xml你需要有

<application
        android:name=".DadosComuns"

暫無
暫無

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

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