亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Android開(kāi)發(fā) Activity和Fragment詳解

 更新時(shí)間:2016年08月31日 09:43:08   作者:郭朝  
本文主要介紹Android開(kāi)發(fā) Activity和Fragment,這里對(duì)Activity和Fragment的知識(shí)做了詳細(xì)講解,并附簡(jiǎn)單代碼示例,有興趣的小伙伴可以參考下

1.Activity的生命周期

1)多個(gè)Activity組成Activity棧,當(dāng)前活動(dòng)位于棧頂。我們先來(lái)看看各種Activity基類的類圖:

當(dāng)Activity類定義出來(lái)之后,這個(gè)Activity何時(shí)被實(shí)例化、它所包含的方法何時(shí)被調(diào)用,這些都不是由開(kāi)發(fā)者所決定的,都應(yīng)該由Android系統(tǒng)來(lái)決定。

下面我們來(lái)看一下Activity的生命周期:

2.Activity的用法

1)啟動(dòng)、關(guān)閉Activity

// 首先需要?jiǎng)?chuàng)建啟動(dòng)的Activity對(duì)應(yīng)的Intent
Intent intent = new Intent(MainActivity.this, TwoActivity.class);

// 啟動(dòng)Activity
startActivity(Intent intent);
startActivityForResult(Intent intent, int requestCode); // requestCode:請(qǐng)求碼
//startActivityForResult方法以指定的請(qǐng)求碼啟動(dòng)Activity,并通過(guò)重寫onActivityResult方法獲取返回的結(jié)果。

// 關(guān)閉Activity
finish();
finishActivity(int requestCode);
// finishActivity方法結(jié)束以startActivityForResult方法啟動(dòng)的Activity。

2)啟動(dòng)其他Activity并返回結(jié)果

當(dāng)前Activity重寫onActivityResult(int requestCode, int resultCode, Intent intent)
requestCode:請(qǐng)求碼(指出該方法是從哪個(gè)請(qǐng)求的結(jié)果觸發(fā)的)
resultCode:Activity返回的結(jié)果碼(指出返回的數(shù)據(jù)來(lái)自于哪個(gè)新的Activity)
被啟動(dòng)的Activity需要調(diào)用setResult()方法設(shè)置處理結(jié)果。

實(shí)例:

在當(dāng)前Activity中重寫onActivityResult方法

public class MainActivity extends Activity {
  Button bn;
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    // 獲取界面上的組件
    ...
    // 綁定事件監(jiān)聽(tīng)器
    bn.setOnClickListener(new OnClickListener() {
      @Override
      public void onClick(View view) {
        Intent intent = new Intent(MainActivity.this, TwoActivity.class);
        startActivityForResult(intent, 0); // 0是請(qǐng)求碼,用于標(biāo)識(shí)該請(qǐng)求
      }
    });
  }
  @Override
  public void onActivityResult(int requestCode, int resultCode, Intent intent) {
    // 處理特定的結(jié)果
    if (requestCode == 0 && resultCode == 0) {
      // 取出Intent里的Extras數(shù)據(jù)
      Bundle data = intent.getExtras();
      // 取出Bundle中的數(shù)據(jù)
      String result = data.getString("test");
      Toast.makeText(getApplicationContext(), result, 0).show();
    }
  }
}

然后在被啟動(dòng)的TwoActivity中調(diào)用setResult()方法設(shè)置處理結(jié)果

// 獲取啟動(dòng)該Activity之前的Activity對(duì)應(yīng)的Intent
Intent intent = getIntent();
intent.putExtra("test", "test");
// 設(shè)置該SelectActivity的結(jié)果碼,并設(shè)置結(jié)束之后退回的Activity
SelectCityActivity.this.setResult(0, intent);
// 結(jié)束TwoActivity
TwoActivity.this.finish();

3.使用Bundle在Activity之間交換數(shù)據(jù)

Intent提供了多個(gè)重載的方法來(lái)“攜帶”額外的數(shù)據(jù),如下:

intent.putExtras(Bundle data); // 向Intent放入數(shù)據(jù)包
intent.putExtras(String name, Xxx value); // 向Intent中按key-value對(duì)的形式放入數(shù)據(jù)
intent.getExtras(); // 取出Intent中攜帶的數(shù)據(jù)包
intent.getXxxExtras(String name); //從Intent中按key取出指定類型的數(shù)據(jù)

上面方法中Bundle就是一個(gè)簡(jiǎn)單的數(shù)據(jù)攜帶包,Intent主要通過(guò)Bundle對(duì)象來(lái)攜帶數(shù)據(jù),Bundle包含多個(gè)方法來(lái)存取數(shù)據(jù):

Bundle bundle = new Bundle(); // 首先創(chuàng)建一個(gè)Bundle對(duì)象
bundle.putXxx(String key, Xxx data); // 向Bundle中放入數(shù)據(jù)
bundle.putSerializable(String key, Serializable data); // 向Bundle中放入一個(gè)可序列化的對(duì)象(即實(shí)現(xiàn)了java.io.Serializable接口)
bundle.getXxx(String key); // 從Bundle中取出數(shù)據(jù)
bundle.getSerializable(String key); // 從Bundle中取出一個(gè)可序列化的對(duì)象

4.Activity的四種加載模式

配置AndroidManifest.xml中Activity時(shí),可指定android:launchMode屬性用于配置該Activity的加載模式,該屬性支持4個(gè)屬性值:
standard:標(biāo)準(zhǔn)模式;
singleTop:棧頂單例模式;
singleTask:棧內(nèi)單例模式(如果目標(biāo)Activity已經(jīng)存在、但沒(méi)有位于棧頂,系統(tǒng)會(huì)把位于該Activity上面的所有Activity移出Task棧,從而使目標(biāo)Activity轉(zhuǎn)入棧頂);
singleInstance:全局單例模式(新創(chuàng)建Activity將放入新棧,一個(gè)棧只包含一個(gè)Activity,如果目標(biāo)Activity已經(jīng)存在,系統(tǒng)會(huì)把該Activity所在Task轉(zhuǎn)到前臺(tái)顯示出來(lái))。

5.Fragment的生命周期

Fragment是AndroiD3.0引入的新API,F(xiàn)ragment代表Activity子模塊(Activity片段),F(xiàn)ragment必須嵌入到Activity中使用,F(xiàn)ragment的生命周期受它所在Activity的生命周期的控制。

Fragment可調(diào)用getActivity()方法獲取它所在Activity;
Activity可調(diào)用FragmentManager的findFragmentById()或findFragmentByTag()方法獲取Fragment;
在Activity運(yùn)行過(guò)程中,可調(diào)用FragmentManager的add()、remove()、replace()方法動(dòng)態(tài)的添加、刪除和替換Fragment。

1)我們先來(lái)看看各種Fragment基類的類圖:

2)下面我們來(lái)看一下Fragment的生命周期,并和Activity的生命周期做對(duì)比:

6.Fragment的用法

1)創(chuàng)建Fragment

創(chuàng)建Fragment通常要實(shí)現(xiàn)如下三個(gè)方法:
onCreate()、onCreateView()、onPause()

為了控制Fragment顯示的組件,通常需要重寫onCreateView()方法,該方法返回的View將作為該Fragment顯示的View組件。

// 重寫該方法,該方法返回的View將作為Fragment顯示的組件
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
  // 加載/res/layout/目錄下的fragment.xml布局文件
  View view = inflater.inflate(R.layout.fragment, container, false);
  TextView name = (TextView)view.findViewById(R.id.name));
  ...
  return view;
}

2)將Fragment添加到Activity

將Fragment添加到Activity有如下兩種方式:

第1種:在布局文件中使用<fragment.../>元素添加Fragment,<fragment.../>元素的android:name屬性指定Fragment的實(shí)現(xiàn)類。

第2種:在Java代碼中通過(guò)FragmentTransaction對(duì)象的add()方法來(lái)添加Fragment。
Activity的getFragmentManager()方法可返回FragmentManager,F(xiàn)ragmentManager對(duì)象的beginTransaction()方法即可開(kāi)啟并返回FragmentTransaction對(duì)象。

3)如何在Activity中動(dòng)態(tài)的添加、更新、以及刪除Fragment呢?

首先需要在MainActivity布局文件中添加FrameLayout(設(shè)置id為fl),然后簡(jiǎn)單創(chuàng)建一個(gè)兩個(gè)Fragment(MyFragment和TwoFragment)如下:

public class MyFragment extends Fragment  { 
  @Override 
  public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    return inflater.inflate(R.layout.fragment_my, container, false); 
  } 
}
public class TwoFragment extends Fragment  { 
  @Override 
  public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    return inflater.inflate(R.layout.fragment_two, container, false); 
  } 
}

接下來(lái)就可以在MainActivity中動(dòng)態(tài)的添加、更新、以及刪除Fragment了,MainActivity中調(diào)用的方法如下:

// 設(shè)置默認(rèn)的Fragment
FragmentManager fm = getFragmentManager(); 
FragmentTransaction transaction = fm.beginTransaction(); 
myFragment = new MyFragment(); 
transaction.replace(R.id.fl, myFragment); 
transaction.commit();

假設(shè)點(diǎn)擊某按鈕更新Fragment,該按鈕點(diǎn)擊事件如下:

@Override 
public void onClick(View v) { 
  FragmentManager fm = getFragmentManager(); 
  // 開(kāi)啟Fragment事務(wù) 
  FragmentTransaction transaction = fm.beginTransaction(); 
  twoFragment = new TwoFragment(); 
  // 使用當(dāng)前Fragment的布局替代fl的控件 
  transaction.replace(R.id.fl, twoFragment); 
  // transaction.addToBackStack(); // 將事物添加到back棧,允許用戶按BACK按鍵返回到替換Fragment之前的狀態(tài)
  // 事務(wù)提交 
  transaction.commit(); 
}

以上就是對(duì)Android Activity和Fragment 的資料整理,后續(xù)繼續(xù)補(bǔ)充相關(guān)資料,謝謝大家對(duì)本站的支持!

相關(guān)文章

最新評(píng)論