中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Android studio 動態fragment的使用方法

發布時間:2020-10-28 17:18:48 來源:億速云 閱讀:422 作者:Leah 欄目:開發技術

Android studio 動態fragment的使用方法?很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

fragment的使用時Android的基礎,它有兩種用法,第一個就是靜態的fragment。第二個則是動態的fragment。
靜態fragment直接在layout創建你想要的fragment的XML的文件,然后在你的Java包里面創建對應fragment的class文件
布局代碼如下所示

Android studio 動態fragment的使用方法

<&#63;xml version="1.0" encoding="utf-8"&#63;>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 android:orientation="vertical">
 <TextView
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:text="歡迎來到廣西!"/>

</LinearLayout>

Android studio 動態fragment的使用方法

<&#63;xml version="1.0" encoding="utf-8"&#63;>
<LinearLayout 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"
 android:orientation="vertical"
 tools:context=".MainActivity">
 <Button
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:text="去廣西"
  android:id="@+id/bt_anjian1"/>
 <Button
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:text="去廣東"
  android:id="@+id/bt_anjian2"/>
 <LinearLayout
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:orientation="vertical"
  android:id="@+id/ll_rongqi"
  android:layout_weight="9">

 </LinearLayout>
 <fragment
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:id="@+id/fragment_1"/>

</LinearLayout>

*這里需要注意一下,如果你不給fragment加個id,那你運行app的時候將會發生閃退現象。

Android studio 動態fragment的使用方法

package com.example.anyone_fragment_2;

import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;

public class Fragment_1 extends Fragment {


 @Nullable
 @Override

 public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
  View view=inflater.inflate(R.layout.fragment_1,container,false);
  return view;
 }
}

這樣靜態fragment算是弄好了,但是這次我們主要討論動態fragment的用法

首先,我們先在activity_main中寫下如下代碼

<&#63;xml version="1.0" encoding="utf-8"&#63;>
<LinearLayout 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"
 android:orientation="vertical"
 tools:context=".MainActivity">
 <Button
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:text="去廣西"
  android:id="@+id/bt_anjian1"/>
 <Button
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:text="去廣東"
  android:id="@+id/bt_anjian2"/>
 <LinearLayout
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:orientation="vertical"
  android:id="@+id/ll_rongqi"
  android:layout_weight="9">

 </LinearLayout>

</LinearLayout>

布局效果圖是這樣的

Android studio 動態fragment的使用方法

這里fragment的XML文件和開頭所說的靜態fragment的那個XML文件的寫法是一樣的
同理,fragment對應的class文件也是相同的。

package com.example.anyone_fragment_2;

import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentTransaction;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {//有abstract就閃退

 private Button bt_anjian1,bt_anjian2;
 private Fragment Fragment_1,Fragmentnow,Fragment_2;
 private FragmentManager fragmentManager;
 private FragmentTransaction fragmentTransaction;
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);

  chushihua();
  shilihua();


 }
 private void chushihua()
 {
  bt_anjian1=findViewById(R.id.bt_anjian1);
  bt_anjian2=findViewById(R.id.bt_anjian2);
  bt_anjian1.setOnClickListener(this);
  bt_anjian2.setOnClickListener(this);
 }
 private void shilihua(){
  //用于實例化fragment
  Fragment_1=new Fragment_1();
  Fragment_2=new Fragment_2();
  Fragmentnow=Fragment_1;
  fragmentManager=getSupportFragmentManager();
  fragmentTransaction=fragmentManager.beginTransaction();
  //38:只要你要對fragment進行操作就少不了這句 原來的寫法是FragmentTransaction fragmentTransaction=fragmentManager.beginTransaction();
  fragmentTransaction.add(R.id.ll_rongqi,Fragment_1).commit();

 }
  public void onClick(View vv)
 {
  fragmentTransaction=fragmentManager.beginTransaction();
  switch (vv.getId())
  {
   case R.id.bt_anjian1:if (Fragment_1.isAdded())
   {
    fragmentTransaction.hide(Fragmentnow).show(Fragment_1).commit();
   }
   else
   {
    fragmentTransaction.hide(Fragmentnow).add(R.id.ll_rongqi,Fragment_1).commit();
   }
   Fragmentnow=Fragment_1;
    break;
   case R.id.bt_anjian2:if(Fragment_2.isAdded())
   {
    fragmentTransaction.hide(Fragmentnow).show(Fragment_2).commit();
   }
   else
   {
    fragmentTransaction.hide(Fragmentnow).add(R.id.ll_rongqi,Fragment_2).commit();
   }
   Fragmentnow=Fragment_2;
   break;

  }
 }
}

下面來分析一些地方
初始化功能函數

private void chushihua()
 {
  bt_anjian1=findViewById(R.id.bt_anjian1);
  bt_anjian2=findViewById(R.id.bt_anjian2);
  bt_anjian1.setOnClickListener(this);
  bt_anjian2.setOnClickListener(this);
 }

這樣寫的目的是讓代碼可讀性更好,不至于很混亂。

其次就是實例化我們所寫的fragment功能函數

private void shilihua(){
  //用于實例化fragment
  Fragment_1=new Fragment_1();
  Fragment_2=new Fragment_2();
  Fragmentnow=Fragment_1;
  fragmentManager=getSupportFragmentManager();
  fragmentTransaction=fragmentManager.beginTransaction();
  //38:只要你要對fragment進行操作就少不了這句 原來的寫法是FragmentTransaction fragmentTransaction=fragmentManager.beginTransaction();
  fragmentTransaction.add(R.id.ll_rongqi,Fragment_1).commit();

 }

其中的

FragmentManager fragmentManager;

這個是fragment和activity交互所要用到的。

fragmentManager=getSupportFragmentManager();

固定寫法。

private FragmentTransaction fragmentTransaction;
 fragmentTransaction=fragmentManager.beginTransaction();

是調動fragment操作的API,也必不可少。

fragmentTransaction.add(R.id.ll_rongqi,Fragment_1).commit();

是添加fragment所用的語句,在這里就相當于是初始化吧。add(容器id,碎片對象),commit則是提交。

 public void onClick(View vv)
 {
  fragmentTransaction=fragmentManager.beginTransaction();
  switch (vv.getId())
  {
   case R.id.bt_anjian1:if (Fragment_1.isAdded())
   {
    fragmentTransaction.hide(Fragmentnow).show(Fragment_1).commit();
   }
   else
   {
    fragmentTransaction.hide(Fragmentnow).add(R.id.ll_rongqi,Fragment_1).commit();
   }
   Fragmentnow=Fragment_1;
    break;
   case R.id.bt_anjian2:if(Fragment_2.isAdded())
   {
    fragmentTransaction.hide(Fragmentnow).show(Fragment_2).commit();
   }
   else
   {
    fragmentTransaction.hide(Fragmentnow).add(R.id.ll_rongqi,Fragment_2).commit();
   }
   Fragmentnow=Fragment_2;
   break;

  }
 }

這里的onClick的名字是不能改變的,否則你button沒辦法觸發。
用傳來的形參View vv來獲取到我們所點擊的按鈕來判斷操作。
思想就是,如果Fragment存在,則只需要把它展示出來即可。isAdded嘛,ed過去式,那就是代表存在過咯。
若是沒有,則添加就好。

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

大兴区| 焉耆| 岳阳市| 社会| 和田市| 德江县| 桃园市| 平利县| 岳池县| 鄂伦春自治旗| 普格县| 五莲县| 沽源县| 米易县| 博野县| 盐亭县| 鄂温| 铁岭市| 抚州市| 姚安县| 称多县| 白银市| 宁都县| 苍梧县| 花垣县| 武隆县| 合阳县| 红原县| 吴旗县| 黄冈市| 峡江县| 灵石县| 麟游县| 津市市| 洮南市| 交口县| 江津市| 涿鹿县| 江门市| 精河县| 靖安县|