• Stars
    star
    122
  • Rank 292,031 (Top 6 %)
  • Language
    Java
  • License
    Apache License 2.0
  • Created about 8 years ago
  • Updated almost 4 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

📌 A view controller manages a set of views that make up a portion of your app’s user interface,it aims to make ui develop change more clear and flexible.(ViewControler 是一种界面开发组件化实现方式,利用它可以将一些复杂的 UI 界面开发组件化.)

ViewController

A view controller manages a set of views that make up a portion of your app’s user interface, it aims to make ui develop change more clear and flexible.

English | 中文 | Android 复杂界面开发实践之 ViewController: 介绍

demo

Advantage

  • Make UI development components,resolve problem of code bloated.
  • flexible, one component can used in more place.
  • easy use, easy develop.

Usage

As a good practice, I recommend you run or watch demo code directly.

import dependency

you can import dependency or copy source file to your project directly, so far, only one file in this lib.

Add the JitPack repository to your build file

allprojects {
	repositories {
		...
		maven { url "https://jitpack.io" }
	}
}

Add the dependency

dependencies {
	 compile 'com.github.maoruibin:ViewController:0.9.1'
}

develop component

just like this demo image, we should develop four component.

now I want to develop comment component as a demo, i will introduce the point by code annotation.

// 1、every component mast extends ViewController
public class HouseCommentViewController extends ViewController<List<String>> 

// 2、indicate layout id for this component  
@Override
protected int resLayoutId() {
    return R.layout.detail_comment_layout;
}

// init this component's view element 
@Override
protected void onCreatedView(View view) {
    mLlContainer = view.findViewById(R.id.ll_container);
    ...
}

// bind data to this view component 
@Override
protected void onBindView(List<String> comments) {
    for (String comment:comments) {
        TextView view = new TextView(getContext());
        view.setBackgroundResource(R.color.bk_item);
        view.setText(comment);
        int padding = Utils.dp2px(16);
        view.setPadding(padding,padding,padding,padding);
        mLlContainer.addView(view);
    }
}

Now, we have finished a simple view component, and you can watch left components implement by demo code.

Assemble Component in Activity

We have finished four components for house detail UI.

HousePhotoViewController    //House picture component 
HouseParamViewController    //House param info component
HouseDescViewController     //House description component
HouseCommentViewController  //House comment component

the left job is assemble. the core of assemble is

every view controller support a way to attach owner's view to root layout,so activity should have a root layout use to fill all views.

The java code is like this

// 1、define ViewController instance
private ViewController<List<String>> mHousePhotoViewController;
private ViewController<HouseDetail.Param> mHouseParamViewController;
private ViewController<List<String>> mHouseCommentViewController;
private ViewController<String> mHouseDescViewController;

// 2、init instance 
mHousePhotoViewController = new HousePhotoViewController(this);
mHouseParamViewController = new HouseParamViewController(this);
mHouseDescViewController = new HouseDescViewController(this);
mHouseCommentViewController = new HouseCommentViewController(this);

// 3、attach view controller to activity root, usually the best choose for root is a vertical LinearLayout. 
mHousePhotoViewController.attachRoot(mLlContainer);
mHouseParamViewControler.attachRoot(mLlContainer);
mHouseDescViewControler.attachRoot(mLlContainer);
mHouseCommentViewControler.attachRoot(mLlContainer);

// 4 、mock get data 
getData();

// 5、fill data to UI 

fillData();

// 6、fill data to different view controller
private void fillData(HouseDetail detail) {
    mHousePhotoViewController.fillData(detail.photos);
    mHouseParamViewController.fillData(detail.param);
    mHouseDescViewController.fillData(detail.desc);
    mHouseCommentViewController.fillData(detail.comments);
}

and now, a complex ui had split four components, by this way, every components only deal with owner logic.

And if other activity or fragment have a same component need implement, you can reuse code directly, nice!

TODO

  • Manage lifecycle
  • Support a AndroidStudio Templete for generate ViewController frame

Author

http://gudong.name

https://github.com/maoruibin

License

Copyright 2016 咕咚

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

More Repositories

1

TranslateApp

📝 A translations app without interruptions, copy words and translate directly, show result by top view.
Java
1,807
star
2

GankDaily

A application used to show technical information in every working days, use MVP pattern.
Java
696
star
3

AppPlus

A open source android application, and used to manage app,export apk, watch recent processes.
Java
437
star
4

AwesomeArticles

🗃️ 收集看到的内容特别棒的技术文章并会配有一段个人短评
412
star
5

OneDrawable

✏️ Use only one image to set a background with a click effect for the View
Java
294
star
6

ReView

🎨 A view to help developers and designers view the View's font size, color, and border.
Java
237
star
7

AwesomeAndroidStudioPlugin

Collect awesome plugin for AndroidStudio in our develop life.
150
star
8

GankDagger2

When Meizi meet MVP + Dagger2 + Retrofit2
Java
57
star
9

liuye

柳叶清单开放 API 文档
32
star
10

ChinaShare

社交分享组件
Java
32
star
11

FlowerLoading

🌻 Android loading or progress view, just like iOS IndicatorView.
Java
31
star
12

LockScreenDemo

一个简单的Android 锁屏 demo实现
Java
22
star
13

PowerKey

模仿MIUI6 长按电源键的关机界面
Java
21
star
14

maoruibin.github.com

personal blog
JavaScript
21
star
15

TrendChartView

A custom sliding indicator view showing the air quality index(AQI) by hour( From MoWeather)
Java
11
star
16

HandlerAnalysis

9
star
17

ActionButton

Use TextView as a ActionButton with left icon
Java
8
star
18

pgy.flight

为内测分发平台蒲公英开发的 Android 客户端
Java
7
star
19

skills-learning-list

Everything can be learning
5
star
20

FreeNoteData

2
star
21

MaoAppBase

Kotlin
2
star
22

list

todo is funny
Vue
2
star
23

idea

那些一闪而过的好主意
2
star
24

xPic

1
star
25

awesome-background-music

collect awesome background musics
1
star