Gambaran keseluruhan asas Fragmen


Pengenalan kepada bahagian ini

Baiklah, dalam bab sebelumnya kami meletakkan empat komponen utama Android: Aktiviti, Perkhidmatan, Penerima BroadCast, Penyedia Kandungan Serta ikatan antara mereka: Niat, kita semua telah memainkannya, dan bab ini membawakan anda Fragmen. Dalam bahagian ini kami akan memperkenalkan beberapa konsep asas dan penggunaan Fragmen ini! Dokumen rasmi: Fragmen


1. Konsep asas

1) Apakah itu dan untuk apa ia digunakan?

Jawapan: Fragment ialah API baharu yang diperkenalkan selepas Android 3.0 Tujuan asalnya adalah untuk menyesuaikan diri dengan tablet skrin besar. Sudah tentu, ia masih menjadi kegemaran reka bentuk UI APP tablet, dan pembangunan telefon mudah alih biasa kami juga akan menambah serpihan ini. Kita boleh menganggapnya sebagai Aktiviti kecil, juga dipanggil serpihan Aktiviti! Fikirkanlah, jika antara muka yang besar, kita Dengan hanya satu susun atur, ia akan menjadi sangat menyusahkan untuk menulis antara muka, dan jika terdapat banyak komponen, ia juga akan menjadi sangat menyusahkan untuk diuruskan! Daripada menggunakan Fragment Kita boleh membahagikan skrin kepada beberapa bahagian dan kemudian mengumpulkannya untuk pengurusan modular! Ini menjadikannya lebih mudah untuk Kemas kini secara dinamik antara muka pengguna aktiviti semasa operasi! Selain itu, Fragment tidak boleh digunakan secara bersendirian, ia perlu bersarang dalam Aktiviti Digunakan dalam, walaupun ia mempunyai kitaran hayatnya sendiri, ia masih akan dipengaruhi oleh kitaran hayat hos Aktiviti, seperti Aktiviti Jika ia dimusnahkan dengan memusnahkan, ia juga akan dimusnahkan!

Gambar berikut ialah Serpihan yang diberikan dalam dokumen yang sepadan dengan situasi berbeza antara telefon mudah alih dan tablet:

1.png

PS: Mudah Pelayaran berita halaman menggunakan dua Fragmen untuk memaparkan senarai berita dan kandungan berita masing-masing; mata:


Berikut ialah beberapa perkara utama menggunakan Fragmen:

  • Diperkenalkan selepas versi 3.0, iaitu minSdk mestilah lebih besar daripada 11
  • Fragmen perlu bersarang dalam Aktiviti Sudah tentu, ia juga boleh disarang dalam Fragmen lain, tetapi yang ini bersarang Fragmen juga perlu bersarang dalam Aktiviti Secara tidak langsung, Fragmen masih perlu bersarang dalam Aktiviti!! Terpengaruh dengan kitaran hayat Aktiviti hos, sudah tentu ia juga mempunyai kitaran hayatnya sendiri Selain itu, ia tidak digalakkan untuk menggunakannya dalam Fragment. Nested Fragment adalah kerana kitaran hayat Fragment yang bersarang di dalamnya tidak terkawal!!!
  • Dokumen rasmi menyatakan bahawa semasa membuat Fragment, sekurang-kurangnya tiga kaedah perlu dilaksanakan: onCreate( ), onCreateView( ), OnPause ( ); Tetapi nampaknya hanya boleh menulis satu onCreateView...
  • Kitaran hayat Fragmen agak serupa dengan Aktiviti: tiga keadaan:
    Disambung semula: Fragmen yang dibenarkan kelihatan
    Dijeda: aktiviti kelihatan , tetapi tidak dapat fokus
    Dihentikan: ①Panggil addToBackStack() dan Fragmen ditambahkan pada timbunan Bcak ②Aktiviti bergerak ke latar belakang, atau Fragmen diganti/dipadamkan
    ps: Serpihan dalam keadaan berhenti masih hidup (semua status dan maklumat ahli dikekalkan oleh sistem), namun, ia tidak berguna kepada pengguna Ia tidak lagi kelihatan, dan jika aktiviti itu dibunuh, dia juga akan dibunuh

4) Beberapa subkelas Fragmen:

ps: Banyak. kali kita Mereka semua secara langsung menulis semula Fragmen, mengembang memuatkan susun atur dan menyelesaikan perniagaan yang sepadan tidak banyak digunakan, dan ia akan digunakan apabila diperlukan. Masa untuk menyelidiki dengan lebih mendalam!

PreferenceFragment
  • Antaramuka WebView:WebViewFragment
  • 5) Adakah anda menggunakan Fragment di bawah pakej App atau v4? Di bawah pakej:
  • Gambaran keseluruhan masalah:
  • Saya percaya ramai rakan akan menghadapi situasi berikut apabila menggunakan Fragmen:

Jadi patutkah kita menggunakan Fragmen di bawah android.app atau pakej android.support.v4.app? Bagaimana pula dengan Fragmen?

Jawapan: Sebenarnya, semuanya mungkin Seperti yang dinyatakan sebelum ini, Fragment telah diperkenalkan selepas Android 3.0 (API 11), jadi jika apl yang anda bangunkan memerlukan. Bagaimana pula dengan menjalankan versi di bawah 3.0? Contohnya, 2.3 masih mempunyai sedikit bahagian pasaran Jadi, pakej v4 wujud, Dan minimum adalah serasi dengan versi 1.6! Bagi pakej mana yang hendak digunakan, semuanya bergantung pada keperluan anda Pada masa kini, bahagian pasaran telefon bimbit di bawah 3.0 sebenarnya sangat kecil, semuanya kira-kira 4.0 dan ke atas, dan 6.0 akan dikeluarkan pada bulan Oktober. .. Jadi pada masa ini, anda boleh terus Gunakan Fragment di bawah pakej aplikasi Kemudian memanggil kaedah yang berkaitan, biasanya tiada masalah jika Fragmen anda menggunakan pakej aplikasi, Kedua-dua FragmentManager dan FragmentTransaction perlu berada dalam pakej aplikasi! Sama ada gunakan aplikasi untuk semua, atau v4 untuk semua, Jika tidak, ralat akan dilaporkan! Sudah tentu, jika anda mahu apl anda serasi dengan telefon mudah alih versi lebih rendah, maka anda boleh memilih untuk menggunakan pakej v4!

Perkara yang perlu diambil perhatian apabila menggunakan pakej v4 untuk memuat turun Fragmen:

  • ① Jika anda menggunakan Fragment di bawah pakej v4, maka Aktiviti yang anda sertai mesti mewarisi FragmentActivity! Kes: Hari ini saya memuatkan serpihan secara statik dalam fail xml, dan kemudian menulis semula serpihan itu, tetapi ralat telah dilaporkan semasa memuatkan Aktiviti. Petunjuk umum ialah ralat Fragment masih tidak ditemui atau sesuatu Atribut nama telah ditukar beberapa kali dan ia masih salah Akhirnya saya mendapati bahawa saya menggunakan Oleh kerana pakej v4, anda hanya perlu menukar Aktiviti anda kepada FragmentActivity
  • ② Saya telah menulis kod berikut sebelum ini, dan kemudian melaporkan ralat:

4.jpg

Agak membingungkan, FragmentManager dan FragmentTransaction semuanya menggunakan pakej v4. Aktiviti juga mewarisi FragmentActivity? Tukar sahaja kepada pakej aplikasi, tetapi ini berbeza daripada pakej v4 yang kami gunakan. Adakah terdapat konflik dalam premis? Sebenarnya, terdapat penyelesaian
Jawapan: Hanya tukar getFragmentManager( ) kepada getSupportFragmentManager( ) dan itu sahaja


2. Cipta Fragmen

1) Pemuatan Statik Fragmen

Proses pelaksanaan:

5.png

Kod sampel:

Langkah 1:Tentukan susun atur serpihan, iaitu kandungan yang dipaparkan oleh serpihan
Langkah 2 :Untuk menyesuaikan kelas Fragment, anda perlu mewarisi Fragment atau subkelasnya dan mengatasi kaedah onCreateView() Dalam kaedah ini, panggil: kaedah inflater.inflate() untuk memuatkan fail susun atur Fragment, dan kemudian kembalikan objek paparan yang dimuatkan

kelas awam Fragmentone memanjangkan Fragment {
@Override
Paparan awam onCreateView (LayoutInflater inflater, bekas ViewGroup,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment1, container,false);
return view;

}

Langkah 3:Tambah teg serpihan dalam fail susun atur yang sepadan dengan Aktiviti yang perlu memuatkan serpihan. Ingat, atribut nama ialah nama kelas yang layak sepenuhnya, yang bermaksud ia mesti termasuk nama pakej Fragmen, seperti:

<fragment
android:id="@+id /fragment1"
android:name="com.jay.example.fragmentdemo.Fragmentone"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1 " />

Langkah 4: Aktiviti memanggil setContentView() dalam kaedah onCreate() untuk memuatkan fail reka letak!


2) Muatkan Fragment secara dinamik

Proses pelaksanaan:

7.png

Kod sampel: Apa yang ditunjukkan di sini ialah apabila bertukar antara skrin mendatar dan menegak . Aktiviti {

@Override6.gif void dilindungi onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

Display didowger = getW () .getDefaultDisplay();
if(dis.getWidth() > dis.getHeight())
{
Fragment1 f1 = new Fragment1();
getFrag mentManager().beginTransaction(). ).gantikan (R.id.LinearLayout1, f1).commit();
                                                                                                                                           🎜> getFragmentManager().beginTransaction() .replace(R.id.LinearLayout1, f2).komit  );                                                                                                   

3. Pengurusan Fragmen dan Transaksi Fragmen

8.png


4. Interaksi antara Fragmen dan Aktiviti

9.png

Sesetengah rakan mungkin tidak suka melihat gambar, jadi mari perkenalkan dalam perkataan:

1) Pemerolehan komponen

Fragment memperoleh komponen dalam Aktiviti: getActivity(). (R.id.list);
Aktiviti mendapat komponen dalam Fragment (mengikut kedua-dua id dan tag): getFragmentManager.findFragmentByid(R.id.fragment1);


2) Pemindahan data

①Activit menghantar data ke Fragment:

Buat pakej data Bundle dalam Activity dan panggil setArguments of Fragment instance ( berkas) Oleh itu, paket data Bundle dihantar ke Fragment, dan kemudian getArguments dipanggil dalam Fragment untuk mendapatkan Himpunkan objek, dan kemudian huraikannya

②Fragment menghantar data ke Aktiviti

Tentukan antara muka panggil balik dalaman dalam Fragmen, dan kemudian biarkan ia termasuk Aktiviti Fragmen melaksanakan antara muka panggil balik. Fragment boleh memindahkan data melalui antara muka panggil balik, saya percaya ramai orang tahu apa itu, tetapi Saya tidak boleh menulisnya "serpihan memindahkan data ke Aktiviti" di Internet adalah semua kod yang ditulis oleh Cikgu Li Gang. Lupakan saja, mari tuliskan kod separa di sini, saya percaya pembaca akan memahaminya sepintas lalu:

Langkah 1: Tentukan antara muka panggil balik: (dalam Fragmen) <. 🎜>

/*Antaramuka*/
Panggil Balik antara muka awam{
/*Tentukan kaedah untuk mendapatkan maklumat*/
public void getResult(Hasil rentetan); >

Langkah 2: Panggilan balik antara muka (dalam Fragmen)

/*Panggil balik antara muka*/

public void getData(CallBack callBack){
/ *Dapatkan maklumat kotak teks, sudah tentu anda juga boleh lulus jenis parameter lain, bergantung pada keperluan anda*/
String msg = editText.getText().toString(
callBack.getResult (msg);
}

Langkah 3: Gunakan kaedah panggil balik antara muka untuk membaca data (dalam Aktiviti)

/* Gunakan kaedah panggil balik antara muka untuk mendapatkan data */
leftFragment. getData(Panggil Balik() baharu {
@Override
public void getResult(String result) { /*Cetak maklumat*/
Toast.makeText(MainActivity.this, "-->>" + hasil , 1) .show();
}
  });

Untuk meringkaskan kaedah: ->Tentukan antara muka dalam Fragment, antara muka Tentukan kaedah abstrak dalam antara muka, dan tetapkan jenis parameter data yang anda ingin luluskan
->Kemudian tulis kaedah abstrak dalam antara muka panggilan dan hantar data kepada; lulus
->Langkah seterusnya ialah Aktiviti, panggil kaedah yang disediakan oleh Fragment, dan kemudian proses data apabila mengatasi kaedah abstrak Baca sahaja!!!

③Pemindahan data antara Fragment dan Fragment

Malah, ini sangat mudah, cari serpihan untuk menerima Objek data, hanya panggil setArguments terus untuk menghantar data masuk. Biasanya apabila menggantikan, iaitu, data dipindahkan apabila serpihan melompat, maka anda hanya perlu memulakan Fragmen untuk dilompat. Kemudian panggil kaedah setArgumentsnya untuk menghantar data
Jika dua Fragmen perlu menghantar data dengan segera dan bukannya melompat, anda perlu mendapatkan data yang diluluskan oleh f1 dalam Aktiviti dahulu. Kemudian hantar ke f2, menggunakan Activity sebagai medium~

Kod sampel adalah seperti berikut:

FragmentManager fManager = getSupportFragmentManager( );
FragmentTransaction fTransaction = fManager.beginTransaction();
Fragmentthree t1 = new Fragmentthree();
Fragmenttwo t2 = new Fragmenttwo();
Bundle bundle = new Bundle(>);<🎜 putString(" key",id);
t2.setArguments(bundle);
fTransaction.add(R.id.fragmentRoot, t2, "~~~"); ;
fTransaction.commit();


5 Berjalan-jalan melalui rajah kitaran hayat:

Setelah berfikir panjang, saya memutuskan untuk membawa anda melalui rajah kitaran hayat yang mudah untuk mendalami pemahaman anda tentang kitaran hayat Fragment:

①Apabila Aktiviti memuatkan Fragment, ia memanggil kaedah berikut mengikut urutan: onAttach -> onCreate -> onActivityCreated -> onStart ->onResume②Apabila kami mencipta Aktiviti gaya dialog yang digantung, atau yang lain, ia adalah tempat Fragmen terletak Aktiviti boleh dilihat, tetapi tidak mendapat fokus

onJeda

③Apabila kotak dialog ditutup, Aktiviti mendapat fokus semula:

onResume

④Apabila kami menggantikan Fragment , dan memanggil addToBackStack() untuk menambahkannya pada tindanan Belakang

onPause -> onDestoryView

! ! Perhatian, Fragment pada masa ini masih belum dimusnahkan lagi!!!⑤Apabila kita menekan kekunci belakang pada papan kekunci, Fragment akan dipaparkan semula:

onCreateView -> ; onActivityCreated -> onStart -> onResume

⑥Jika selepas kami menggantikan, kaedah addToBackStack()

tidak dipanggil sebelum transaksi dilakukan

Jika Fragmen ditambahkan pada susunan belakang atau jika Aktiviti terkeluar, Fragmen akan ditamatkan sepenuhnya. Fragmen akan memasuki keadaan pemusnahan onJeda -> onStop -> Ringkasan bahagian ini: Bahagian ini menerangkan kepada anda beberapa konsep asas dan penggunaan mudah Fragmen berikut saya percaya anda akan beransur-ansur menyukainya Fragment, kerana panjangnya, saya akan menulis begitu banyak dalam bahagian ini Di bahagian seterusnya, kami akan membawa anda menulis sesuatu tentang Fragment. Contoh yang biasa digunakan, sila nantikan, terima kasih~