Android-Activity

配置Activity:

        如果Activity所在的包与AndroidManifest.xml文件的<manifest></manifest>标签中通过                    package属性指定的包名一致,则android:name属性的值可以直接设置为.Activity名称”

        <activity android:name=".SecondActivity"></activity>

开启ActivitystartActivity()

        在MainActivityonCreate()方法中启动SecondActivity

        显式意图:

                Intent intent = new Intent(MainActivity.this,SecondActivity.class);

                startActivity(intent);

        隐式意图:

                Intent intent = new Intent();

                intent.setAction("cn.itcast.start_activity");//指启动Activity

                startActivity(intent);

关闭Activity:finish()


IntentFilter

当发送一个隐式Intent后,Android系统会将他与程序中的每一个组件的过滤器进行匹配,匹配属性有 actiondatacategory需要这三个属性都匹配成功才能唤起相应的组件。

action:用于指定Intent对象的动作

<intent-filter>

    <action android:name="android.intent.action.EDIT"/>

    <action android:name="android.intent.action.VIEW"/>

    ......

</intent-filter>

只要Intent携带的action与其中一个<intent-filter>标签中action的声明相同,action属性就匹配成功。

在清单文件中为Activity添加<intent-filter>标签时,必须添加action属性,否则隐式Intent无法开启该Activity

data:指定数据的URI或者数据MIME类型他的值通常与Intentaction属性有关联

<intent-filter>

<data android:mimeType="video/mpeg" android:scheme="http..."/>

    <data android:mimeType="audio/mpeg" android:scheme="http..."/>

    ...

</intent-filter>

隐式Intent携带的data数据只要与IntentFilter中的任意一个data声明相同,data属性就匹配成功。

category:用于为action添加额外信息

<intent-filter>

    <category android:name="android.intent.category.DEFAULT" />

    <category android:name="android.intent.category.BROWSABLE" />

    .......

</intent-filter>

一个IntentFilter可以不声明category属性,也可以声明多个category属性

隐式Intent中声明的category必须全部能够与某一个IntentFilter中的category匹配才算匹配成功。

IntentFilter中罗列的category属性数量必须大于或者等于隐式Intent携带的category属性数量时,category属性才能匹配成功。如果一个隐式Intent没有设置category属性,那么他可以通过任何一个IntentFilter(过滤器)的category匹配。


数据传递

putExtra():

send:

Intent intent = new Intent();

intent.setClass(MainActivity.this,SecondActivity.class); //设置跳转到的Activity

intent.putExtra("studentName","王晓明");

startActivity(intent);

get:

Intent intent = getIntent();

String name = intent.getStringExtra("studentName");          

bundle类:

send:

Intent intent = new Intent();

intent.setClass(this,SecondActivity.class);

Bundle bundle = new Bundle();            

bundle.putString("account", "江小白");//封装到bundle对象中

intent.putExtras(bundle);//将bundle对象封装到intent对象中

startActivity(intent);

get:

Bundle bundle = getIntent().getExtras();       

String account = bundle.getString("account");

Android数据传递的五种方法汇总


数据回传

// first:
// 使用startActivityForResult方法开启SecondActivity,第1个参数是Intent对象,第2个参数是请求码,用于标识请求的来源。
Intent intent = new Intent(MainActivity.this,SecondActivity.class);
startActivityForResult(intent,1);

// second:
Intent intent = new Intent();
intent.putExtra("data","Hello MainActivity");
setResult(2,intent);//在SecondActivity中添加返回数据
finish();

// SecondActivity被销毁之后在MainActivity中回调onActivityResult()方法
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == 1&&resultCode == 2){
        String acquiredData= data.getStringExtra("data"); //获取回传的数据
        Toast.makeText(MainActivity.this,acquiredData,Toast.LENGTH_SHORT).show();
    }
}

启动模式 

任务栈

        任务栈:一种用来存放Activity实例的容器

        特点:“先进后出” 

        操作:压栈和出栈

intent.setFlags():

standard模式

        standard模式是Activity默认启动方式,每启动一个Activity就会在栈顶创建一个新的实例

singleTop模式

        singleTop模式会判断要启动的Activity实例是否位于栈顶,如果位于栈顶则直接复用,否则创          建新的实例;

        复用时, onCreateonStart不会被系统调用。方法 onNewIntent会被回调。

singleTask模式

        singleTask模式下每次启动该Activity时,系统首先会检查栈中是否存在当前Activity实例,如            果存在则直接使用,并把当前Activity之上的所有实例全部出栈

singleInstance模式

        singleInstance模式会启动一个新的任务栈来管理Activity实例,无论从哪个任务栈中启动该            Activity该实例在整个系统中只有一个


Fragment

Fragment(碎片)是一种可以嵌入在Activity中的UI片段,它可以用来描述Activity中的一部分布局。

Fragment不能独立存在,必须嵌入到Activity中使用。

public class NewsListFragment extends Fragment{
	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container,
			Bundle savedInstanceState) {
		View v = inflater.inflate(R.layout.fragment, container, false);
        //第一个参数表示Fragment对应的布局资源ID,
        //第二个参数表示存放Fragment布局的ViewGroup,
        //第三个参数表示是否在创建Fragment的布局时附加到ViewGroup上。
		return v;
	}
}

Activity中动态添加Fragment的步骤:

  • a)创建需要创建一个Fragment的实例对象。
  • b)获取FragmentManager(Fragment管理器)的实例。
  • c)开启FragmentTransaction(事务)
  • d)Activity的布局容器(一般为FrameLayout)中添加Fragment
  • e)通过commit()方法提交事务
//实例化fragment对象
NewsListFragment fragment = new NewsListFragment();
//获取FragmentManager实例
FragmentManager fm = getFragmentManager();
//开启事务
FragmentTransaction beginTransaction = fm.beginTransaction();
//添加Fragment
beginTransaction.replace(R.id.ll,fragment);
//提交事务
beginTransaction.commit();

在layout中添加fragment: 

 

public class SecondFragment extends Fragment implements View.OnClickListener {
    Button button;
    TextView textView;

    public SecondFragment() {
        // Required empty public constructor
    }


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // 获得代表fragment布局文件的view
        View view =inflater.inflate(R.layout.fragment_second, container, false);
        textView=view.findViewById(R.id.textView);

        button=view.findViewById(R.id.button);
        button.setOnClickListener(this);
        return view;
    }

    @Override
    public void onClick(View view) {
        switch (view.getId()){
            case R.id.button:
                //获取同一Activity中 当前已存在的 Fragment对象
                FirstFragment fragment=(FirstFragment)this.getFragmentManager().findFragmentById(R.id.firstFragment);
                //通过FirstFragment的View获取textView
                TextView textView=fragment.getView().findViewById(R.id.textView);
                this.textView.setText(textView.getText().toString());
        }
    }

    //获取textView
    public TextView getTextView() {
        return textView;
    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值