mvp入门第一篇——生产手机的案例

mvpdemo

(建议你写完demo两边之后看这些内容)我对mvp的理解:
1. 肯定是合理的分类,比如手机类,生产手机的类。
2. 我们的功能都要事先写到接口里:比如TaskPresenter,我们要写到这里。
3. 我们的通道类,实现这个接口,实现里面的方法。
4 . 要有一个操作View的operationView类,这个类是一个接口。
5.主类实现这个接口完成view的操作。
6. 通道类想要处理界面的问题的时候,就调用operationView类。
7.我们的主要的类实现这个operationView的类。然后在里面写更改view的实际操作。




第二个案例,我采用mvp的模式编写代码,生成一个创建手机的类。
1.类的结构:


布局文件:


gradle:
   
   
apply plugin: 'com.android.application'
 
android {
compileSdkVersion 23
buildToolsVersion "23.0.3"
 
defaultConfig {
applicationId "com.example.alan.play"
minSdkVersion 19
targetSdkVersion 23
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
 
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.4.0'
compile 'com.jakewharton:butterknife:7.0.1'
compile 'com.android.support:design:23.4.0'
compile 'com.android.support:cardview-v7:23.1.1'
compile 'com.android.support:recyclerview-v7:23.1.1'
compile 'io.reactivex:rxjava:1.1.3'
compile 'io.reactivex:rxandroid:1.1.0'
compile 'com.squareup.retrofit2:retrofit:2.0.1'
compile 'com.squareup.retrofit2:converter-gson:2.0.1'
compile 'com.squareup.retrofit2:adapter-rxjava:2.0.1'
 
}
不过里面的很多依赖是用不到的。
   
   
package com.example.alan.play;
 
/**
* Created by alan on 2016/9/19.
*/
public interface OperationView {
// 定义一个接口,里面有很多方法。
void showCreatingPhone();
void showPhoneCountChange();
void showNoPhone();
void showFactoryBusy();
void showCreatedPhone();
 
}
    
    
package com.example.alan.play;
 
/**
* Created by alan on 2016/9/19.
*/
public class Phone {
private String name;
private double price;
 
public String getName() {
return name;
}
 
public void setName(String name) {
this.name = name;
}
 
public double getPrice() {
return price;
}
 
public void setPrice(double price) {
this.price = price;
}
 
public Phone(String name, double price) {
this.name = name;
this.price = price;
}
}
     
     
package com.example.alan.play;
 
import java.util.ArrayList;
 
/**
* Created by alan on 2016/9/19.
*/
public class PhoneFactory {
// 创建一个arrayList,里面的对象是手机,phone
 
private ArrayList<Phone> phoneList=new ArrayList<>();
// 添加手机和去除手机
public void addPhone(Phone phone){
phoneList.add(phone);
}
// 去除手机
public void removePhone(Phone phone){
phoneList.remove(phone);
}
// 根据位置去除手机bean
public void removePhone(int index){
if (index>0&&index<phoneList.size()){
phoneList.remove(index);
}
}
public void createPhone(String name,double price){
Phone phone=new Phone(name,price);
phoneList.add(phone);
}
 
public ArrayList<Phone> getPhoneList(){
return phoneList;
}
public int getPhoneCounts(){
return phoneList.size();
 
}
 
 
 
}
      
      
package com.example.alan.play;
 
import java.util.ArrayList;
 
/**
* Created by alan on 2016/9/19.
*/
public interface TaskPresenter {
// 任务通道的接口类。
void addPhone(Phone phone);
void removePhone(Phone phone);
void removePhone(int index);
ArrayList<Phone> getPhonesList();
void addPandomPhone();
 
 
}



   
   
package com.example.alan.play;
 
import android.os.Handler;
import android.os.Message;
 
import java.util.ArrayList;
 
/**
* Created by alan on 2016/9/19.
*/
public class PhonePresenter implements TaskPresenter {
// 实现接口,就要实现里面的方法。
private final PhoneFactory phoneFactory;
private final OperationView operationView;
 
// 创建手机的时间,msg消息的int值。
private static final long createPhoneTime=2000;
private static final int msgWhat=0x102;
 
 
public PhonePresenter(PhoneFactory phoneFactory, OperationView operationView) {
this.phoneFactory = phoneFactory;
this.operationView = operationView;
}
 
@Override
public void addPhone(Phone phone){
// 显示手机数目的改变?
 
 
operationView.showPhoneCountChange();
// 如果他是真的话就显示工厂很忙
if(mHandler.hasMessages(msgWhat)){
operationView.showFactoryBusy();
return;
}
// 创建一个消息
Message message=new Message();
message.what=msgWhat;
message.obj=phone;
// 设置发送消息的时间延迟
mHandler.sendMessageDelayed(message,createPhoneTime);
operationView.showCreatingPhone();
}
 
@Override
public void removePhone(Phone phone) {
 
}
public ArrayList<Phone> getPhones(){
ArrayList<Phone> phones=phoneFactory.getPhoneList();
if (phones.isEmpty()){
operationView.showNoPhone();
}
return phones;
}
 
@Override
public void removePhone(int index) {
phoneFactory.removePhone(index);
if(phoneFactory.getPhoneCounts()<=0){
operationView.showNoPhone();
 
}
operationView.showPhoneCountChange();;
 
 
}
 
@Override
public ArrayList<Phone> getPhonesList() {
return null;
}
 
@Override
public void addPandomPhone() {
 
}
private Handler mHandler=new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
// 往手机工厂里面添加手机
phoneFactory.addPhone((Phone)msg.obj);
operationView.showCreatedPhone();
operationView.showPhoneCountChange();
}
};
}

   
   
package com.example.alan.play;
 
 
import android.app.ProgressDialog;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
 
import java.util.Random;
 
import butterknife.Bind;
import butterknife.ButterKnife;
 
public class MainActivity extends AppCompatActivity implements OperationView {
 
 
@Bind(R.id.tv)
TextView tv;
@Bind(R.id.but)
Button but;
@Bind(R.id.ll)
ListView ll;
ArrayAdapter<Phone> arrayAdapter;
 
private ProgressDialog mLoadingDialog;
 
private Toast toast;
 
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
 
PhoneFactory phoneFactory=new PhoneFactory();
phoneFactory.createPhone("nokia", 555);
// 手机的管道出现
final PhonePresenter phonePresenter=new PhonePresenter(phoneFactory,this);
// 他是绑定了手机工厂类。
arrayAdapter=new ArrayAdapter<Phone>(this,R.layout.support_simple_spinner_dropdown_item,phoneFactory.getPhoneList());
but.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
phonePresenter.addPhone(new Phone("iphone",4000+new Random().nextInt(1000)));
}
});
ll.setAdapter(arrayAdapter);
ll.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) {
phonePresenter.removePhone(position);
}
});
 
}
 
@Override
public void showCreatingPhone() {
mLoadingDialog=new ProgressDialog(this);
mLoadingDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
mLoadingDialog.setMessage("工厂正在生产手机");
// 可以取消么。
mLoadingDialog.setCancelable(true);
mLoadingDialog.show();
 
}
 
@Override
public void showPhoneCountChange() {
arrayAdapter.notifyDataSetChanged();
 
}
 
@Override
public void showNoPhone() {
// findViewById(R.id.noPhone).setVisibility(View.VISIBLE);
 
}
 
@Override
public void showFactoryBusy() {
showToast("工厂繁忙,请稍后再试");
 
}
 
@Override
public void showCreatedPhone() {
// 在显示生产手机的时候,实时取消进度条
if (mLoadingDialog !=null&&mLoadingDialog.isShowing()){
mLoadingDialog.dismiss();
}
mLoadingDialog=null;
showToast("新生产一部手机");
// findViewById(R.id.noPhone).setVisibility(View.GONE);
 
}
 
private void showToast(String string){
if (toast==null){
toast=Toast.makeText(this,string,Toast.LENGTH_SHORT);
}else {
toast.setText(string);
}
toast.show();
}
 
 
 
 
 
 
 
 
 
 
 
}



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值