2017-05-18 76 views
0

我想知道在使用Android MVP架構時Activity應該被引用還是不在Presenter代碼中?演示者是否應該瞭解Android MVP體系結構中的活動?

我迄今發現的示例MVP體系結構沒有引用它,但在我的代碼中,它不是Presenter上的屬性,而是某些方法中的參數。這是否會導致問題?這是否遵循Android MVP?

這裏是一個演示一個代碼示例:

package com.example.example; 

import android.net.Uri; 
import android.support.v4.app.FragmentActivity; 
import android.support.v4.content.FileProvider; 

import com.example.example.util.Constants; 
import com.example.example.util.ImageFile; 

import java.io.IOException; 

/** 
* Presenter from home screen, (Main), of the app 
*/ 
public class MainPresenter implements MainContract.Presenter { 

    private final MainContract.View mView; 
    private final ImageFile mImageFile; 

    public MainPresenter(MainContract.View mainView, ImageFile imageFile) { 
     mView = mainView; 
     mImageFile = imageFile; 
    } 

    @Override 
    public void takePicture(FragmentActivity activity) throws IOException { 
     mImageFile.create(activity); 

     Uri photoUri = FileProvider.getUriForFile(
       activity, 
       Constants.FILE_PROVIDER_PATH, 
       mImageFile.getFile()); 

     mView.openCamera(photoUri); 
    } 

    Uri getImageFileUri() { 
     return mImageFile.getUri(); 
    } 
} 
+1

難道你不能只是添加一些參數openCamera(),這樣你就不需要演示者內部的活動?你現在做的方式是爲你的演示者創建一個android依賴項,這是你想避免的 – lelloman

回答

1

在適當的MVP實施,主持人應該不知道有這個活動。如果我們要使用活動,那麼在測試過程中我們將不得不嘲笑活動,這會使測試變得困難。所以,就你而言,你應該通過視圖引用將你的mImageFile傳遞給活動,並在活動類中創建URI。

相關問題