2017-11-13 23 views
0

Androidのライブラリを開発していて、次のシナリオがある場合は、MainActivityに返信して欲しいです。どうすればいい?私はコールバックを試してみましたが、自分でActivityクラスのオブジェクトを作成できなかったのでできませんでした。それを達成する他の方法はありますか? AsyncTaskListenerの実装私はいくつかのネットワーク操作をしています。私はstartActivityForResultを私のライブラリの仕様にしたがって使用することができませんでした。アクティビティのあるAndroidでコールバックを実装する

public class MainActivity extends AppCompatActivity implements MyReceiver{ 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
    MyServiceImpl b = new MyServiceImpl(); 
    String request = "123"; 
    b.request(this,request); 
    } 

    @Override 
    public void completed(String result) {   
     Log.d("MainActivity","Result - "+result); 
    } 
} 

public class MyServiceImpl{ 

    public void request(Activity appActivity,String req){ 
     Intent intent = new Intent(appActivity, ActivityB.class); 
     appActivity.startActivity(intent); 
    } 
} 

public class ActivityB extends AppCompatActivity imnplements AsyncTaskListener{ 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     // shows UI 
     // network operations 
    } 

    @Override 
    public void taskFinish(String response) { 
    // my result comes here 
    // now i want this result to propagated to MainActiviy 
    } 
} 
+0

この記事を読む、https://stackoverflow.com/questions/3398363/how-to-define-callbacks-in-android – Dhruv

+0

あなたは、アクティビティAからアクティビティAへの応答を返すためにonActivityResultを使用することができます – sree

答えて

0

私はこのようにそれを行うだろう:あなたは活動

public interface MyReceiver { 
    public void onReceive(); 
} 

if(MyActivity.myReceiver!=null){ 
    MyActivity.myReceiver.onReceive(); 
} 

public class MyActivity implements MyReceiver{ 

public static MyReceiver myReceiver; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
    setContentView(R.layout.activity_new_booking);   
    super.onCreate(savedInstanceState); 
    myReceiver = this; 
    } 

    @Override 
    public void onReceive(){ 
     //Implement your code here or send objects in the parameters 
    } 

} 

はそれだけでこれを使用するコールには

インターフェイスを作成します。

クリエイティブにする必要はありませんアクティビティのインスタンスを取得しました。

この場合、startActivityForResultを使用することをお勧めします。

これが役に立ちます。

+0

私のためにMyActivityは私のMainActivityまたはActivityBを意味しますか? – Shailesh

+0

MainActivity。私はちょうどそれがどんな活動でもよい例を与えました。 –

+0

次に、ActivityBから、必要に応じて関数を呼び出します。 –

0

あなたは1つのことを行うことができます。アクティビティーの開始時にライブラリーのオブジェクトを作成し、アクティビティーの参照をそのオブジェクトのインスタンス化に渡します。そしてそのインタフェースコールをアクティビティに実装し直してください。そしてあなたのライブラリの内部では、あなたの活動レベルでコールバックするインターフェースコールバックとコールインターフェースメソッドへの活動参照キャストがあります。

2

この目的のために、私はシングルトンアプローチを使用します。 MainActivityで

class ActivityCommunication { 
private static ActivityCommunication instance = null; 
private MainCallback mainCallback = null; 

private ActivityCommunication() { 
} 

public static ActivityCommunication getInstance() { 
    if (instance == null) { 
     instance = new ActivityCommunication(); 
    } 
    return instance; 
} 

public void setMainCallBackListener(MainCallback mainCallback) { 
    this.mainCallback = mainCallback; 
} 

public void sendDataToMainActivity(Data data) { 
    if (mainCallback != null) { 
     mainCallback.onMainCallBack(data); 
    } 
} 

public interface MainCallback { 
    void onMainCallBack(Data data); 
} 
} 

は、あなたが呼び出されます

ActivityCommunication.getInstance().sendDataToMainActivity(myData); 

onMainCallBack実装方法

が必要なときにデータを送信、ActivityBから上のリスナー

ActivityCommunication.getInstance().setMainCallBackListener(); 

を設定します。

関連する問題