編輯:Android開發教程
相信大家對 MVC 都是比較熟悉了:M-Model-模型、V-View-視圖、C-Controller-控制器,MVP作為MVC的演化版本,也是作為用戶界面(用戶層)的實現模式,那麼類似的MVP所對應的意義:M-Model-模型、V-View-視圖、P-Presenter-表示器。
MVC詳見博客: Android之MVC模式的使用
Model 是用戶界面需要顯示數據的抽象,也可以理解為從業務數據(結果)那裡到用戶界面的抽象。
視圖這一層體現的很輕薄,負責顯示數據、提供友好界面跟用戶交互就行。MVP下Activity和Fragment體現在了這一層,Activity一般也就做加載UI視圖、設置監聽再交由Presenter處理的一些工作,所以也就需要持有相應Presenter的引用。
Presenter這一層處理著程序各種邏輯的分發,收到View層UI上的反饋命令、定時命令、系統命令等指令後分發處理邏輯交由業務層做具體的業務操作,然後將得到的 Model 給 View 顯示。
MVC和MVP的區別
在 MVC 中:
在 MVP 中:
模仿登錄案例:(demo中包含登錄和網絡數據請求)
model
public class ModelSignIn implements ILoginSignIn {
@Override
public void onSignIn(String name, String pwd, IOnSetListenter listenter) {
if (name.isEmpty())
{
if (listenter!=null)
{
listenter.onError("輸入用戶名為空");
return;
}
}
if (pwd.isEmpty())
{
if (listenter!=null)
{
listenter.onError("輸入密碼為空");
return;
}
}
if(name.equals("dickyqie") && pwd.equals("123456"))
{
if (listenter!=null)
{
listenter.onError("登錄成功");
return;
}
}else{
if (listenter!=null)
{
listenter.onError("登錄失敗");
return;
}
}
}
}
presenter
public class Presenter extends BasePresenter<IView> {
ILoginSignIn iLoginSignIn=new ModelSignIn();
public void setSignIn(String name,String pwd)
{
iLoginSignIn.onSignIn(name, pwd, new ILoginSignIn.IOnSetListenter() {
IView view=getView();
@Override
public void onError(String error) {
if(view!=null){
view.showToast(error);
}
}
@Override
public void onSccess(String repsonce) {
if(view!=null){
view.showToast(repsonce);
}
}
});
}
}
activity
public class MainActivity extends BaseActivity<IView,Presenter> implements IView,View.OnClickListener{
EditText username;
EditText password;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
}
private void initView()
{
username=(EditText)findViewById(R.id.username);
password=(EditText)findViewById(R.id.password);
findViewById(R.id.login).setOnClickListener(this);
}
@Override
public Presenter createPersenter() {
return new Presenter();
}
@Override
public void onClick(View v) {
String name=username.getText().toString();
String pwd=password.getText().toString();
p.setSignIn(name,pwd);
}
@Override
public void showToast(String msg) {
Toast.makeText(getApplicationContext(),msg,Toast.LENGTH_LONG).show();
}
}
網絡請求
public class MainActivity extends BaseActivity<IView,Presenter> implements IView,View.OnClickListener {
private TextView textView;
private ProgessDialog dialog;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
}
private void initView(){
textView=(TextView) findViewById(R.id.text);
findViewById(R.id.btn).setOnClickListener(this);
}
@Override
public void onLoadContributorStart() {
showProgress();
}
@Override
public void onLoadContribtorComplete(String topContributor) {
//得到主線程的數據
Message msg=new Message();
msg.what=1;
msg.obj=topContributor;
handler.sendMessage(msg);
}
Handler handler=new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
dismissProgress();
textView.setText(msg.obj.toString());
}
};
@Override
public void onClick(View v) {
p.setGet();
}
@Override
public Presenter createPresenter() {
return new Presenter();
}
@Override
public void onNetWork() {
Toast.makeText(getApplicationContext(),"網絡未連接",Toast.LENGTH_LONG).show();
}
@Override
public void onError() {
Toast.makeText(getApplicationContext(),"數據加載失敗",Toast.LENGTH_LONG).show();
textView.setText("");
}
/***
* 啟動
*/
public void showProgress()
{
if(dialog==null)
{
dialog=new ProgessDialog(MainActivity.this);
}
dialog.showMessage("正在加載");
}
/***
* 關閉
*/
public void dismissProgress()
{
if(dialog==null)
{
dialog=new ProgessDialog(this);
}
dialog.dismiss();
}
}
不要忘記在AndroidManifest.xml加權限哦!
<uses-permission android:name="android.permission.INTERNET"/>
Android系統聯系人全特效實現(下),字母表快速滾動
在上一篇文章中,我和大家一起實現了類似於Android系統聯系人的分組導航和擠壓動畫功能,不過既然 文章名叫做《Android系統聯系人全特效實現》,那麼沒有快速滾動功能
Android簡明開發教程五:Activities
Android應用中的Activity指具有屏幕顯示支持用戶交互的基本模塊,類似於Java ME中的MIDlet, Windows 應用中的Form。 比如可以是撥號,發
Android開發入門(一)詳解活動 1.6 顯示復雜對話框
除了“對話框”進度條,也可以創建一個顯示“操作進度”的對話框,例如顯示正在下載的狀態。1. 創建一個工程:Dialog。2
在Android中實現360手機衛士懸浮窗效果
大家好,今天給大家帶來一個仿360手機衛士懸浮窗效果的教程,在開始之前請允許我說幾句不相干的廢 話。不知不覺我發現自己接觸Android已有近三個年頭了,期間各種的成長少
Android ApiDemos示例解析(32):App->Preferences->Preference dependencies
Preferences之間可以定義依賴關系,在第一個例子中已有說明。對應