Pengontrol tampilan mengelola satu set tampilan yang membentuk sebagian antarmuka pengguna aplikasi Anda, ini bertujuan untuk membuat UI mengembangkan perubahan lebih jelas dan fleksibel.
Bahasa Inggris | 中文 | Android 复杂界面开发实践之 ViewController: 介绍
Sebagai latihan yang baik, saya sarankan Anda menjalankan atau menonton kode demo secara langsung.
Anda dapat mengimpor ketergantungan atau menyalin file sumber ke proyek Anda secara langsung, sejauh ini, hanya satu file dalam lib ini.
Tambahkan Repositori Jitpack ke file build Anda
allprojects {
repositories {
.. .
maven { url " https://jitpack.io " }
}
}Tambahkan ketergantungan
dependencies {
compile ' com.github.maoruibin:ViewController:0.9.1 '
}Sama seperti gambar demo ini, kita harus mengembangkan empat komponen.
Sekarang saya ingin mengembangkan komponen komentar sebagai demo, saya akan memperkenalkan poin dengan anotasi kode.
// 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 );
}
}Sekarang, kami telah menyelesaikan komponen tampilan sederhana, dan Anda dapat menonton komponen kiri diterapkan oleh kode demo.
Kami telah menyelesaikan empat komponen untuk detail rumah UI.
HousePhotoViewController //House picture component
HouseParamViewController //House param info component
HouseDescViewController //House description component
HouseCommentViewController //House comment componentPekerjaan kiri adalah berkumpul. Inti dari perakitan adalah
Setiap pengontrol tampilan mendukung cara untuk melampirkan tampilan pemilik ke tata letak root, sehingga aktivitas harus memiliki penggunaan tata letak root untuk mengisi semua tampilan.
Kode Java seperti ini
// 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 );
}Dan sekarang, UI yang kompleks telah membagi empat komponen, dengan cara ini, setiap komponen hanya menangani logika pemilik.
Dan jika aktivitas atau fragmen lain memiliki komponen yang sama perlu diimplementasikan, Anda dapat menggunakan kembali kode secara langsung, bagus!
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.