package com.actionbarsherlock.sample.roboguice.activity; import android.content.Context; import android.os.Bundle; import android.view.animation.Animation; import android.widget.TextView; import com.actionbarsherlock.sample.roboguice.R; import com.actionbarsherlock.sample.roboguice.controller.Astroboy; import com.github.rtyley.android.sherlock.roboguice.activity.RoboSherlockActivity; import com.google.inject.Inject; import roboguice.inject.InjectResource; import roboguice.inject.InjectView; import roboguice.util.RoboAsyncTask; import java.util.Random; /** * Things you'll learn in this class: * - How to inject Resources * - How to use RoboAsyncTask to do background tasks with injection * - What it means to be a @Singleton */ public class FightForcesOfEvilActivity extends RoboSherlockActivity { @InjectView(R.id.expletive) TextView expletiveText; // You can also inject resources such as Strings, Drawables, and Animations @InjectResource(R.anim.expletive_animation) Animation expletiveAnimation; // AstroboyRemoteControl is annotated as @ContextSingleton, so the instance // we get in FightForcesOfEvilActivity will be a different instance than // the one we got in AstroboyMasterConsole //@Inject AstroboyRemoteControl remoteControl; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.fight_evil); expletiveText.setAnimation(expletiveAnimation); expletiveAnimation.start(); // Throw some punches for( int i=0; i<10; ++i ) new AsyncPunch(this) { @Override protected void onSuccess(String expletive) throws Exception { expletiveText.setText(expletive); } // We could also override onException() and onFinally() if we wanted }.execute(); } // This class will call Astroboy.punch() in the background public static class AsyncPunch extends RoboAsyncTask<String> { // Because Astroboy is a @Singleton, this will be the same // instance that we inject elsewhere in our app. // Random of course will be a new instance of java.util.Random, since // we haven't specified any special binding instructions anywhere @Inject Astroboy astroboy; @Inject Random random; public AsyncPunch(Context context) { super(context); } public String call() throws Exception { Thread.sleep(random.nextInt(5*1000)); return astroboy.punch(); } } }