編輯:關於Android編程
開源的roboguice是一個依賴注入框架,如果你用過Spring 應該知道其好處。
減少程序員的負擔,代碼變的更加簡潔。
工具用的是Android Studio 因為Gradle可以自動添加第三方庫。
Gradle部分內容:
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:22.1.1'
compile 'org.roboguice:roboguice:2.0'
compile ('com.google.inject.extensions:guice-assistedinject:3.0'){
exclude group: 'com.google.inject'
}
}
版本用的是2.0,官方版本最新是3.0
演示基本用法
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
import com.google.inject.Binder;
import com.google.inject.ImplementedBy;
import com.google.inject.Inject;
import com.google.inject.Module;
import roboguice.activity.RoboActivity;
import roboguice.inject.ContentView;
import roboguice.inject.InjectView;
//會調用setContentView方法
@ContentView(R.layout.activity_main)
public class MainActivity extends RoboActivity {
@InjectView(R.id.text1)
private TextView textView; //代替findViewById 不用自己強轉類型
@InjectView(R.id.btn1)
private TextView button;
@Inject
private MyCache myCache;//單列
@Inject
private IService myService;//接口注入
@Inject
private Toaster toaster;//Toast簡單的用法封裝
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
textView.setText(Test is ok. + myCache);
toaster.showMsg(hey, I like to talk to you );
myService.login(1,1);
}
});
}
}
Toaster.java
import android.app.Activity;
import android.widget.Toast;
import com.google.inject.Inject;
import roboguice.inject.ContextSingleton;
/**
* Created by gaofeng on 15-5-13.
*/
//可以獲取當前Activity中的上下文
@ContextSingleton
public class Toaster {
@Inject
private Activity activity;
//不用傳上下文了
public void showMsg(String msg) {//不用自己傳入Context,Activity上下文對象
Toast.makeText(activity,msg, Toast.LENGTH_SHORT).show();
}
}
MyCache.java
import com.google.inject.Singleton;
import java.util.HashMap;
import java.util.Map;
/**
* Created by gaofeng on 15-5-13.
*/
//Cache通常是單列的
@Singleton
public class MyCache { //這裡只是演示,沒有寫太復雜
Map map = new HashMap();
public void put(K k,V t) {
map.put(k,t);
}
public V get(K k) {
return map.get(k);
}
}
下面是接口實例化的代碼,做java ssh web開發一般都是這個樣子
public interface IService { //簡單業務接口
public void login(String u,String passwd);
}
import roboguice.inject.ContextSingleton;
public class MyService implements IService {
@Inject
private MyCache myCache; //和上一次的對象是同一個,單列對象
private Context context;
public MyService() {
}
public MyService(Context context) {
this.context = context;
}
@Override
public void login(String u, String passwd) {
Log.d(, Service Login>>>> + context + + myCache);
//業務代碼xxxx
}}
實現上面的接口實列化 需要配置注冊
import android.content.Context;
import android.util.Log;
import com.google.inject.AbstractModule;
/**
* Created by gaofeng on 15-5-13.
*/
public class CustomModule2 extends AbstractModule {
private Context context;//系統會自己傳入上下文
public CustomModule2(Context context) {
this.context = context;
}
@Override
protected void configure() {
Log.d(, CustomModule2>>>>>>>);
bind(IService.class).toInstance(new MyService(context));//注冊
}
}
還需要配置在 res/values/ 中添加文件roboguice.xml
- com.example.gaofeng.roboguice_demo.CustomModule2
掌握基本的用法就能減少大量的代碼。
不用自己去new對象,單列也很好弄,不用自己定義static對象
如果不考慮更深層的性能問題,我個人認為ScrollerView還是很好用的。而且單用ScrollerView就可以實現分類型的RecyclerView或ListView所
Android測試支持庫包含 UI自動化模塊 ,它可以對Android應用進行自動黑盒測試。在API Level 18中引入了自動化模塊,它允許開發者在組成應用UI的控件
Fragment必須是依存於Activity而存在的,因此Activity的生命周期會直接影響到Fragment的生命周期。官網這張圖很好的說明了倆者的關系:可以看到Fr
SeekBar是一個拖動條控件,最簡單的案例就是我們的調節音量,還有音頻視頻的播放,傳統的SeekBar樣式,如圖傳統的實現太簡單,不足以讓我們到能裝逼的地步。本來是打算