Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> AndroidStudio創建MVP模板

AndroidStudio創建MVP模板

編輯:關於Android編程

最近仿照官方MVP模式開發,如下:
這裡寫圖片描述
每個模塊都需要寫Activity,Contract,Fragment,Presenter。覺得好麻煩,就想能不能一次創建這幾個類
寫到在android studio的D:\android-studio\plugins\android\lib\templates\activities 這個目錄下存在著androidstudio新建項目的模板,拷過來改改就可以了<喎?/kf/ware/vc/" target="_blank" class="keylink">vcD4NCjxjZW50ZXI+DQoJPGltZyBhbHQ9"這裡寫圖片描述" height="598" src="/uploadfile/Collfiles/20160804/20160804092807600.png" width="718" />

復制一個Activity的文件夾重命名為我的MVPActivity,內部有如下幾個文件

這裡寫圖片描述

root文件夾下是模板代碼
globals.xml.ftl
recipe.xml.ftl
template.xml
最後一個圖片是新建項目時的展示圖

首先我把我的activity,fragment,contract,persenter幾個類拷貝到root\src\app_package\下邊,並重命名為xxx.java.ftl文件

然後再globals中修改成



    <#assign Collection=extractLetters(objectKind)>//從輸入的title中獲取輸入字符
    <#assign collection_name=Collection?lower_case>//獲取到的字符轉成小寫
    <#include "../common/common_globals.xml.ftl" />
    //作為activity的layout的命名
    //作為activity的layout的命名
    //作為activity類名
    //作為fragment類名
    //作為presenter類名
    //作為contract類名

    
    

然後在幾個.java.ftl類中做配置,用globals中的配置名代替
MainActivity.java.ftl

package ${packageName};

import android.os.Bundle;

import ${applicationPackage}.R;
import ${applicationPackage}.base.BaseActivity;
import ${applicationPackage}.util.ActivityUtils;

public class ${ActivityName} extends BaseActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_${activity_layout});


        ${FragmentName} ${fragment_layout}Fragment =
                (${FragmentName}) getSupportFragmentManager().findFragmentById(R.id.id_fragment_container);

        if (${fragment_layout}Fragment == null) {
            ${fragment_layout}Fragment = ${FragmentName}.newInstance();
            ActivityUtils.addFragmentToActivity(getSupportFragmentManager(), ${fragment_layout}Fragment, R.id.id_fragment_container);
        }
        new ${PresenterName}(${fragment_layout}Fragment);
    }
}

MainContract.java.ftl

package ${packageName};

import ${applicationPackage}.BasePresenter;
import ${applicationPackage}.BaseView;

public interface ${ContractName} {
    interface View extends BaseView {

    }

    interface Presenter extends BasePresenter {

    }
}

MainFragment.java.ftl

package ${packageName};

import android.os.Bundle;
import android.support.annotation.Nullable;
import android.view.LayoutInflater;
import android.view.View;

import ${applicationPackage}.R;
import ${applicationPackage}.base.BaseFragment;

import static com.google.common.base.Preconditions.checkNotNull;

/**
 * View
 */
public class ${FragmentName} extends BaseFragment implements ${ContractName}.View {
    private ${ContractName}.Presenter mPresenter;

    public static ${FragmentName} newInstance() {
        return new ${FragmentName}();
    }

    @Override
    public void onResume() {
        super.onResume();
        mPresenter.subscribe();
    }

    @Override
    public void onPause() {
        super.onPause();
        mPresenter.unsubscribe();
    }

    @Override
    public void setPresenter(${ContractName}.Presenter presenter) {
        mPresenter = checkNotNull(presenter);
    }

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View root = inflater.inflate(R.layout.fragment_${fragment_layout}, container, false);
        return root;
    }
}

MainPresenter.java.ftl

package ${packageName};

import android.support.annotation.NonNull;
import rx.subscriptions.CompositeSubscription;
import static com.google.common.base.Preconditions.checkNotNull;

/**
 * Presenter
 */
public class ${PresenterName} implements ${ContractName}.Presenter {
    private ${ContractName}.View mLoginView;
    private CompositeSubscription mSubscription;

    public ${PresenterName}(@NonNull ${ContractName}.View ${activity_layout}View) {
        mLoginView = checkNotNull(${activity_layout}View);
        mSubscription = new CompositeSubscription();
        mLoginView.setPresenter(this);
    }

    @Override
    public void subscribe() {

    }

    @Override
    public void unsubscribe() {
        mSubscription.clear();
    }
}

還需要在recipe.xml.ftl中做如下配置。就是新建activity的時候需要創建哪些到哪裡。



    
    

    
    
    
    


template.xml復制過來沒做什麼修改
裡面的name是創建時顯示的名字,改成自己的MVPActivity



到這裡好像就配置完了,可以試一下了,先重啟下android studio。
下邊圖示創建步驟吧,懶得寫字
這裡寫圖片描述
Item是template中default的默認值,自己可以改,如Task,然後finish就o了。
這裡寫圖片描述

這裡寫圖片描述這裡寫圖片描述

打開來看看模板代碼是否正確
這裡寫圖片描述
這裡寫圖片描述
這裡寫圖片描述

應該沒啥問題了。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved