Um controlador de visualização gerencia um conjunto de visualizações que compõem uma parte da interface do usuário do seu aplicativo, ele pretende fazer com que a interface do usuário desenvolva mudanças mais claras e flexíveis.
Inglês | 中文 | Android 复杂界面开发实践之 ViewController: 介绍
Como uma boa prática, recomendo que você corra ou assista ao código de demonstração diretamente.
Você pode importar dependência ou copiar o arquivo de origem para o seu projeto diretamente, até agora, apenas um arquivo nesta lib.
Adicione o repositório Jitpack ao seu arquivo de construção
allprojects {
repositories {
.. .
maven { url " https://jitpack.io " }
}
}Adicione a dependência
dependencies {
compile ' com.github.maoruibin:ViewController:0.9.1 '
}Assim como esta imagem de demonstração, devemos desenvolver quatro componentes.
Agora quero desenvolver o componente de comentários como uma demonstração, apresentarei o ponto por anotação de código.
// 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 );
}
}Agora, terminamos um componente de visualização simples e você pode assistir aos componentes esquerdos implementarem por código de demonstração.
Terminamos quatro componentes para a interface do usuário da casa.
HousePhotoViewController //House picture component
HouseParamViewController //House param info component
HouseDescViewController //House description component
HouseCommentViewController //House comment componentO trabalho de esquerda está montando. O núcleo da montagem é
Todo controlador de exibição suporta uma maneira de anexar a visão do proprietário ao layout da raiz, para que a atividade deve ter um layout de raiz para preencher todas as visualizações.
O código Java é assim
// 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 );
}E agora, uma interface do usuário complexa dividiu quatro componentes, dessa maneira, todos os componentes lidam apenas com a lógica do proprietário.
E se outra atividade ou fragmento tiver um mesmo componente precisar implementar, você pode reutilizar o código diretamente, bom!
http://gudong.name
https://github.com/maoruibin
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.