美文网首页
mvc模式学习,(含约束布局)

mvc模式学习,(含约束布局)

作者: 念雅_a9ef | 来源:发表于2019-11-04 14:29 被阅读0次

为了纠正自己的认知误区,加深自己的理解,学着写了一个demo,毕竟能有绝知此事要躬行的觉悟也是经过很多错误才得来的。

/**
* 模型类(Model层):通常是对本地数据库的操作或者是通过网络请求获取网络数据的操作
* 我们在Model里面模拟了一个本地数据库,并提供了增删改查的方法*/
 public class BookModel {
   private static Listlist=new ArrayList<>();
// 模拟本地数据库
 static {
 list.add(new Book("Java从入门到精通1",R.mipmap.ic_launcher));

list.add(new Book("Android从入门到精通",R.mipmap.ic_launcher));

list.add(new Book("Java从入门到精通",R.mipmap.ic_launcher));

list.add(new Book("Android从入门到精通",R.mipmap.ic_launcher));}

// 添加书本
public void addBook(String name,int image) {  
    list.add(new Book(name, image));}
//删除书本
public void deleteBook( ) {  
    list.remove(list.size() -1);}
// 查询数据库所有书本
 public List query() {
     return list;}
}

public class BookAdapter extends ArrayAdapter {
    private Context mContext;
    private ListmLists;
    private int layoutView;

public BookAdapter(Context context,int textViewResourceId,List lists) {
    super(context, textViewResourceId, lists);
    this.mContext = context;
    this.mLists = lists;
    this.layoutView=textViewResourceId;
    }
@Override
public View getView(int position,View convertView,ViewGroup parent) {
    View view=LayoutInflater.from(mContext).inflate(layoutView,null);
    TextView tvName=view.findViewById(R.id.tv_name);
    tvName.setText(mLists.get(position).getName());
    return view;}
      }
/* 描述:控制器(Controller层):根据Model层的方法,加上我们的业务逻辑处理,对外提供方法并暴露接口 看delete这个方法,判断List是否为空(业务逻辑),使用mode.deleteBook()(Model层方法),通过             listener.onComplete()(暴露接口)*/
public class BookController {
   private BookModel mode;
   public BookController(){
   mode=new BookModel();
}
//添加成功的回调接口
public interface  onAddBookListener{
    void onComplete();
}
//删除成功的回调接口
public interface onDeleteBookListener{
    void onComplete();
}
//添加书本
public void add(onAddBookListener listener){
    mode.addBook("JavaWeb从入门到精通",R.mipmap.ic_launcher);
if (listener !=null) {
        listener.onComplete();
    }
    }

//删除书本
public void delete(onDeleteBookListener listener){
    if(mode.query().isEmpty()){
        return;
    }else{
        mode.deleteBook();
    }
    if(listener!=null){
        listener.onComplete();
    }
}
/*查询所有书本*/
public List query(){
    return mode.query();
    }
}

public class BookActivity extends AppCompatActivity implements View.OnClickListener {

private ListView listBook;

private TextView tvAdd,tvDelete;

private BookController bookController;

private ListbookList;

private BookAdapter bookAdapter;

@Override

protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

listBook = findViewById(R.id.list_book);

tvAdd=findViewById(R.id.tv_add);

tvDelete=findViewById(R.id.tv_delete);

tvAdd.setOnClickListener(this);

tvDelete.setOnClickListener(this);

bookController=new BookController();

bookList =bookController.query();

bookAdapter =new BookAdapter(this,R.layout.book_item,bookList);

listBook.setAdapter(bookAdapter);
}

@Override

public void onClick(View v) {

    switch (v.getId()){

        case R.id.tv_add:

bookController.add(new BookController.onAddBookListener() {
      @Override
      public void onComplete() {
        bookAdapter.notifyDataSetChanged();
}
     });

break;
case R.id.tv_delete:
bookController.delete(new BookController.onDeleteBookListener() {
                @Override
                public void onComplete() {
                    bookAdapter.notifyDataSetChanged();
}
            });
break;
}
}
}

 <?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".BookActivity">

<ListView
    android:id="@+id/list_book"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="Hello World!"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintRight_toRightOf="parent"
    app:layout_constraintTop_toTopOf="parent" />


    <TextView
        app:layout_constraintVertical_chainStyle="packed"
        app:layout_constraintRight_toLeftOf="@+id/tv_delete"
        android:id="@+id/tv_add"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:text="增加"
        android:textSize="20sp"
        android:padding="10dp"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/list_book" />


    <TextView
        android:padding="10dp"
        android:layout_marginLeft="50dp"
        android:id="@+id/tv_delete"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:text="删除"
        android:textSize="20sp"
        app:layout_constraintLeft_toLeftOf="@id/tv_add"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/list_book"
        app:layout_constraintLeft_toRightOf="@+id/tv_add"/>
</android.support.constraint.ConstraintLayout>

原博主地址 (https://www.cnblogs.com/lpd1/p/8017796.html)

相关文章

网友评论

      本文标题:mvc模式学习,(含约束布局)

      本文链接:https://www.haomeiwen.com/subject/llhdbctx.html