2017-01-29 2 views
0

MainApplicationでアクティビティを取得して注入するにはどうすればよいですか?私は議論として活動を渡す必要がある外部ライブラリを持っています。このanswerは、現在のアクティビティを必要とする部分でgetCurrentActivity()メソッドを使用することを提案していますが、ReactContextBaseJavaModuleクラスから削除されています。これを行うための他の方法はありますか?下のコードで 'this'キーワードが使用されたアクティビティをどのように渡すのですか?おかげで..ApplicationまたはReactContextBaseJavaModuleを継承するクラス内でアクティビティを取得する方法は?

package com.bluetoothioexample; 

import android.app.Application; 
import android.util.Log; 

import com.facebook.react.bridge.ReactContextBaseJavaModule; 

import com.facebook.react.ReactApplication; 
import com.facebook.react.ReactInstanceManager; 
import com.facebook.react.ReactNativeHost; 
import com.facebook.react.ReactPackage; 
import com.facebook.react.shell.MainReactPackage; 

import java.util.Arrays; 
import java.util.List; 

import com.subsite.bluetoothio.BluetoothIOPackage; 
import com.oblador.vectoricons.VectorIconsPackage; 

public class MainApplication extends Application implements ReactApplication { 

    private final ReactNativeHost mReactNativeHost = new ReactNativeHost(this) { 
    @Override 
    protected boolean getUseDeveloperSupport() { 
     return BuildConfig.DEBUG; 
    } 

    @Override 
    protected List<ReactPackage> getPackages() { 
     return Arrays.<ReactPackage>asList(
      new MainReactPackage(), 
      new BluetoothIOPackage(this), //<- How pass the activity 
             // from ReactApplication ? 
      new VectorIconsPackage() 
    ); 
    } 
    }; 

    @Override 
    public ReactNativeHost getReactNativeHost() { 
     return mReactNativeHost; 
    } 
} 
+0

これが必要な場合は、コードを誤って設計してしまいます。アクティビティの範囲以下のものは、Applicationクラスに知られていなければなりません。 Applicationクラスは、アプリケーションのスコープに存在するものについてのみ知っている必要があります。 –

+0

私はそのように使用されるように構造化された外部ライブラリを使用しています... –

+0

いいえあなたはありません。 ReactApplicationクラスを実際のApplicationクラスにする必要はありません。 –

答えて

2

Iが反応-ネイティブにないですが、あなたはApplication.ActivityLifecycleCallbacksを実装し、ライフサイクルコールバックregisterActivityLifecycleCallbacks(this);を登録し、活動が電流を得るために作成されるのを待つ必要があり、単純なトリック

public class MainApplication extends Application implements Application.ActivityLifecycleCallbacks{ 


    @Override 
    public void onCreate() { 
     super.onCreate(); 
     registerActivityLifecycleCallbacks(this); 
    } 


    private final ReactNativeHost mReactNativeHost = new ReactNativeHost(this) { 
     @Override 
     protected boolean getUseDeveloperSupport() { 
      return BuildConfig.DEBUG; 
     } 

     @Override 
     protected List<ReactPackage> getPackages() { 
      return Arrays.<ReactPackage>asList(
        new MainReactPackage(), 
        new BluetoothIOPackage(mCurrentActivity), // 
        // from ReactApplication ? 
        new VectorIconsPackage() 
      ); 
     } 
    }; 
    private Activity mCurrentActivity; 

    @Override 
    public ReactNativeHost getReactNativeHost() { 
     return mReactNativeHost; 
    } 

    @Override 
    public void onActivityCreated(Activity activity, Bundle savedInstanceState) { 
     mCurrentActivity = activity; 
    } 

があります参照。

+0

Worked !.答えをありがとう.. –

+0

@ニコラ:私は同じを試みたが、エラーが発生しました。助言がありますか。 'MainApplicationは抽象メソッドではなく、ActivityLifecycleCallbacksの抽象メソッドonActivityDestroyed(Activity)をオーバーライドしません。 public class MainApplication extends Application実装Application.ActivityLifecycleCallbacks' –

+1

@Mohit Pandeyすべてのメソッドをオーバーライドする必要があります。答えでは、私は読みやすさの理由からdidntしています。 –

関連する問題