0

FirstActivityStartActivityから SecondActivity に達したことを使用すると、前のアクティビティで宣言されたオブジェクトにアクセスしたいと思います。

不足している明らかなメカニズムはありますか。ソースがないため、渡したいオブジェクト(DropboxAPI)でParceableを使用できません(parceableにすることはできません)。

FirstActivity.thisインテントを使ってParceableにできるのでパスしてもいいですか?

    Intent intent=new Intent(FirstActivity.this,SecondActivity.class);
    intent.putExtra("MyClass",FirstActivity.this);
    startActivity (intent);

import com.dropbox.client2.DropboxAPI;
import com.dropbox.client2.android.AndroidAuthSession;

import android.app.Application;
import android.hardware.Camera.Parameters;
import android.os.Parcel;
import android.os.Parcelable;
public class temp extends Application {

    DropboxAPI<AndroidAuthSession> mApi;
    public void onCreate() {  
        super.onCreate();  
    }

    temp(DropboxAPI<AndroidAuthSession> Api)
    {
        mApi=Api;
    }
    public DropboxAPI<AndroidAuthSession> getName() {    
        return mApi;  
} 
    public void setName(DropboxAPI<AndroidAuthSession> dropboxclient) {  
        this.mApi = dropboxclient;  
}
}

ファーストクラスのコード:

t = (temp)getApplication();
                t.setName(mApi);
                //basket.putParcelable("key", MCActivity.this);
                Intent intent=new Intent(MCActivity.this,DownActivity.class);
                //intent.putExtra("MyClass",t);
                startActivity (intent);

セカンドクラスのコード:

public void onCreate(Bundle bun) {

    // TODO Auto-generated method stub
    super.onCreate(bun);
    setContentView(R.layout.download);
    mImage = (ImageView)findViewById(R.id.image_view);
    //Bundle gotit=getIntent().getExtras();
    t = (temp)getApplication();
    int i=2;
    i=5;
    dApi=t.getName();
}

ログキャット:

06-28 02:24:31.979: I/System.out(729): debugger has settled (1308)
06-28 02:25:08.387: D/AndroidRuntime(729): Shutting down VM
06-28 02:25:08.387: W/dalvikvm(729): threadid=1: thread exiting with uncaught exception (group=0x4001d800)
06-28 02:25:08.705: E/AndroidRuntime(729): FATAL EXCEPTION: main
06-28 02:25:08.705: E/AndroidRuntime(729): java.lang.ClassCastException: android.app.Application
06-28 02:25:08.705: E/AndroidRuntime(729):  at cloud.mobile.MCActivity$3.onClick(MCActivity.java:164)
06-28 02:25:08.705: E/AndroidRuntime(729):  at android.view.View.performClick(View.java:2408)
06-28 02:25:08.705: E/AndroidRuntime(729):  at android.view.View$PerformClick.run(View.java:8816)
06-28 02:25:08.705: E/AndroidRuntime(729):  at android.os.Handler.handleCallback(Handler.java:587)
06-28 02:25:08.705: E/AndroidRuntime(729):  at android.os.Handler.dispatchMessage(Handler.java:92)
06-28 02:25:08.705: E/AndroidRuntime(729):  at android.os.Looper.loop(Looper.java:123)
06-28 02:25:08.705: E/AndroidRuntime(729):  at android.app.ActivityThread.main(ActivityThread.java:4627)
06-28 02:25:08.705: E/AndroidRuntime(729):  at java.lang.reflect.Method.invokeNative(Native Method)
06-28 02:25:08.705: E/AndroidRuntime(729):  at java.lang.reflect.Method.invoke(Method.java:521)
06-28 02:25:08.705: E/AndroidRuntime(729):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
06-28 02:25:08.705: E/AndroidRuntime(729):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
06-28 02:25:08.705: E/AndroidRuntime(729):  at dalvik.system.NativeStart.main(Native Method)
4

4 に答える 4

2

Application クラスを使用してみてください:

public class MyApplication extends Application {
    //Variable we want to share to All Activities in Application

    private DropboxClient dropboxclient;  

    @Override 
    public void onCreate() {  
            super.onCreate();  

    }  
    //Getter Method
    public DropboxClient getName() {    
            return dropboxclient;  
    }  
    //Setter Method
    public void setName(DropboxClient dropboxclient) {  
            this.dropboxclient = dropboxclient;  
    }  
}

MyFirstActivity アクティビティ:

private MyApplication app;
@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        app = (MyApplication)getApplication();  //Get  Application
        app.setName(dropboxclient);
        Intent intent = new Intent(); 
        intent.setClass(this, MySecondActivity.class);  
        startActivity(intent); 

MySecondActivity アクティビティ:

private MyApplication app;  
    @Override 
    protected void onCreate(Bundle savedInstanceState) {  
            super.onCreate(savedInstanceState);   
            app = (MyApplication)getApplication();  //Get  Application
            DropboxClient dropboxclient=app.getName();//Access global value
于 2012-06-27T20:12:05.730 に答える
1

以下をせよ、

で活動を開始しますstartActivityForResult()

startActivityForResult(0, MyActivity.class);

開始したアクティビティが終了する前に、開始したアクティビティでインテントを作成し、エキストラとして返したいデータをインテントに入れます。今すぐ呼び出すsetResult(..., intent);

Intent resultIntent = new Intent();
resultIntent.putExtra("myKey", myVal);
setResult(0, resultIntent);

開始アクティビティで、を実装しonActivityResult()、開始されたアクティビティの結果を処理します。Intent開始されたアクティビティにエクストラを追加したインテントであるが渡されます。

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    //TODO handle here. 
}
于 2012-06-27T20:06:12.750 に答える
1

クラスを拡張Applicationし、そのクラスでクロス アクティビティ オブジェクトを宣言して初期化し、それらのオブジェクトのゲッターを記述します。

アクティビティで次のコードを使用すると、これらのオブジェクトにアクセスできます。

getApplication().getMyObject().doSomeAction();

androidManifest.xml を変更して、拡張アプリケーション クラスについて android に伝える必要があることを覚えておいてください。

于 2012-06-27T20:14:01.207 に答える
0

解決策: StartActivityforResult を使用して、データを 2 番目のアクティビティから最初のアクティビティに戻す

1 つの例では、データが 2 番目のアクティビティから最初のアクティビティに移動します - http://micropilot.tistory.com/1577

于 2012-06-27T20:03:42.937 に答える