Android四大组件之Activity & Fragement

时间:2023-03-10 05:08:23
Android四大组件之Activity & Fragement

1.Activity的生命周期

aaarticlea/png;base64,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" alt="" />

从onResume到onStop之前,为活动周期。

从onStart到onStop为可见周期

从onCreate到onDestory为完整生命周期。

进入onStop之后,Activity可以被销毁。

2.Fragement的生命周期

Android四大组件之Activity & Fragement

3.Activity & Fragement的关系

编译运行,启动程序打印日志如下:

Android四大组件之Activity & Fragement

切换到后台,日志如下:

Android四大组件之Activity & Fragement

从后台切换到前台,日志如下:

Android四大组件之Activity & Fragement

切换到其他的activity,日志如下:

Android四大组件之Activity & Fragement

从其他的activity切换回来,日志如下:

Android四大组件之Activity & Fragement

按home键退出,日志如下:

Android四大组件之Activity & Fragement

4.如何定义使用Fragement

package com.joyfulmath.android4example.fragement;

import com.joyfulmath.android4example.R;

import android.app.Activity;
import android.app.Fragment;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.os.Bundle;
import android.util.Log;
import android.view.Window; public class FragementActivity extends Activity implements onClickResult { private static final String TAG = "framentdemo.FragementActivity";
TitleFragment mTitleFragment;
DetailFragment mDetailFragmentA;
DetailFragment mDetailFragmentB;
FragmentManager fm = getFragmentManager(); /*
* (non-Javadoc)
*
* @see android.app.Activity#onCreate(android.os.Bundle)
*/
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d(TAG, "[onCreate]");
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.layout_fragement_main);
setDefaultFragment();
} /*
* (non-Javadoc)
*
* @see android.app.Activity#onStart()
*/
@Override
protected void onStart() {
super.onStart();
} /*
* (non-Javadoc)
*
* @see android.app.Activity#onResume()
*/
@Override
protected void onResume() {
super.onResume();
} /*
* (non-Javadoc)
*
* @see android.app.Activity#onPause()
*/
@Override
protected void onPause() {
super.onPause();
} /*
* (non-Javadoc)
*
* @see android.app.Activity#onStop()
*/
@Override
protected void onStop() {
super.onStop();
} /*
* (non-Javadoc)
*
* @see android.app.Activity#onDestroy()
*/
@Override
protected void onDestroy() {
super.onDestroy();
} private void setDefaultFragment() {
Log.d(TAG, "[setDefaultFragment]");
FragmentTransaction transaction = fm.beginTransaction();
mTitleFragment = new TitleFragment();
mTitleFragment.setmClicklistener(this);
mTitleFragment.SetHighLight(0);
transaction.replace(R.id.title, mTitleFragment);
mDetailFragmentA = new DetailFragment();
mDetailFragmentA.setName("detail_A");
transaction.replace(R.id.detail, mDetailFragmentA);
// transaction.addToBackStack("detail_A");
transaction.commit();
} @Override
public void onClickIndex(int index) {
Log.d(TAG, "[onClickIndex] index:" + index);
FragmentTransaction transaction = fm.beginTransaction();
switch (index) {
case 0:
mDetailFragmentA = new DetailFragment();
mDetailFragmentA.setName("detail_A");
transaction.replace(R.id.detail, mDetailFragmentA);
transaction.addToBackStack("detail_A");
break;
case 1:
mDetailFragmentB = new DetailFragment();
mDetailFragmentB.setName("detail_B");
transaction.replace(R.id.detail, mDetailFragmentB);
transaction.addToBackStack("detail_B");
break;
}
transaction.commit();
}
}
package com.joyfulmath.android4example.fragement;

import com.joyfulmath.android4example.R;

import android.app.Fragment;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView; public class DetailFragment extends Fragment { private static final String TAG = "framentdemo.DetailFragment";
private String name;
TextView mDetailText;
/* (non-Javadoc)
* @see android.app.Fragment#onCreateView(android.view.LayoutInflater, android.view.ViewGroup, android.os.Bundle)
*/
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
Log.d(TAG, "[onCreateView] ");
View view = inflater.inflate(R.layout.layout_detail_fragment, container, false);
mDetailText = (TextView) view.findViewById(R.id.detail_text);
return view;
} /* (non-Javadoc)
* @see android.app.Fragment#onStart()
*/
@Override
public void onStart() {
super.onStart();
mDetailText.setText(name);
} /* (non-Javadoc)
* @see android.app.Fragment#onSaveInstanceState(android.os.Bundle)
*/
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
} /* (non-Javadoc)
* @see android.app.Fragment#onStop()
*/
@Override
public void onStop() {
super.onStop();
Log.d(TAG, "[onStop] name:"+name);
} /* (non-Javadoc)
* @see android.app.Fragment#onDestroyView()
*/
@Override
public void onDestroyView() {
super.onDestroyView();
Log.d(TAG, "[onDestroyView] name:"+name);
} /**
* @param name the name to set
*/
public void setName(String name) {
Log.d(TAG, "[setName] name:"+name);
this.name = name;
}
}
package com.joyfulmath.android4example.fragement;

import com.joyfulmath.android4example.R;

import android.app.Fragment;
import android.graphics.Color;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button; public class TitleFragment extends Fragment implements OnClickListener { private static final String TAG = "framentdemo.TitleFragment";
private Button btnA;
private Button btnB;
private int mHighIndex = 0;
onClickResult mClicklistener;
/**
* @param mClicklistener the mClicklistener to set
*/
public void setmClicklistener(onClickResult mClicklistener) {
this.mClicklistener = mClicklistener;
} /* (non-Javadoc)
* @see android.app.Fragment#onCreateView(android.view.LayoutInflater, android.view.ViewGroup, android.os.Bundle)
*/
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
Log.d(TAG, "[onCreateView] ");
View view = inflater.inflate(R.layout.layout_title_fragment, container, false);
btnA = (Button) view.findViewById(R.id.btn_a);
btnB = (Button) view.findViewById(R.id.btn_b);
btnA.setOnClickListener(this);
btnB.setOnClickListener(this);
return view;
} /* (non-Javadoc)
* @see android.app.Fragment#onStart()
*/
@Override
public void onStart() {
setHighIndex();
super.onStart();
} /* (non-Javadoc)
* @see android.app.Fragment#onSaveInstanceState(android.os.Bundle)
*/
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
} /* (non-Javadoc)
* @see android.app.Fragment#onStop()
*/
@Override
public void onStop() {
super.onStop();
} /* (non-Javadoc)
* @see android.app.Fragment#onDestroyView()
*/
@Override
public void onDestroyView() {
super.onDestroyView();
} @Override
public void onClick(View v) {
ShowFragmentDetail(v.getId());
} private void ShowFragmentDetail(int id) {
switch(id)
{
case R.id.btn_a:
SetHighLight(0);
setHighIndex();
if(mClicklistener!=null)
{
mClicklistener.onClickIndex(0);
}
break;
case R.id.btn_b:
SetHighLight(1);
setHighIndex();
if(mClicklistener!=null)
{
mClicklistener.onClickIndex(1);
}
break;
}
} public void SetHighLight(int index)
{
mHighIndex = index;
} private void setHighIndex()
{
switch(mHighIndex)
{
case 0:
btnA.setTextColor(Color.BLUE);
btnB.setTextColor(Color.BLACK);
break;
case 1:
btnA.setTextColor(Color.BLACK);
btnB.setTextColor(Color.BLUE);
break;
}
}
}
package com.joyfulmath.android4example.fragement;

public interface onClickResult {
void onClickIndex(int index);
}

5.多个Fragement之间如何切换。

using transaction.replace(R.id.detail, mDetailFragmentB);

6.Avtivity 启动其他Activity & Service & BroadCast。

1).activity.startactivity

2).activity.startservice

3).activity.sendbroadcast/context.sendbroadcast.