首先添加menu,然后添加如下代码:
@Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main,menu);//第二个参数是函数传递的虚拟参数 return true; } @Override public boolean onOptionsItemSelected(@NonNull MenuItem item) { switch (item.getItemId()){ case R.id.add_item: Toast.makeText(MainActivity.this,"click add",Toast.LENGTH_SHORT).show(); break; case R.id.remove_item: Toast.makeText(MainActivity.this,"click remove",Toast.LENGTH_SHORT).show(); break; default: } return true; }显示Intent
使用显示Intent实现页面跳转
to_secondactivity.setonClickListener(new View.onClickListener() { @Override public void onClick(View view) { Intent intent=new Intent(MainActivity.this,secondactivity.class); startActivity(intent); } });
1.跳转页面
首先在androidmanifest中添加action和category如下:
然后在intent中写下要跳转页面的action和category
to_secondactivity.setonClickListener(new View.onClickListener() { @Override public void onClick(View view) { Intent intent=new Intent("com.example.usingmenu.ACTION_START"); intent.addCategory("com.example.usingmenu.MY_CATEGORY"); startActivity(intent); } });
2.使用系统内置动作,打开浏览器并传入网址
to_secondactivity.setonClickListener(new View.onClickListener() { @Override public void onClick(View view) { Intent intent=new Intent(Intent.ACTION_VIEW);//系统内置动作,打开浏览器 intent.setData(Uri.parse("http://www.baidu.com"));//通过该方法将网址字符串解析找到应该打开什么 startActivity(intent); } });
3.自己配置一个页面可以解析http
4.使用系统内置动作,拨号
to_secondactivity.setonClickListener(new View.onClickListener() { @Override public void onClick(View view) { Intent intent=new Intent(Intent.ACTION_DIAL);//系统内置动作,拨号 intent.setData(Uri.parse("tel:10086"));//通过该方法将网址字符串解析找到应该打开什么 startActivity(intent); } });intent向下一个活动传递参数
使用startactivity
首先在第一个页面中写下如下代码
to_secondactivity.setonClickListener(new View.onClickListener() { @Override public void onClick(View view) { Intent intent=new Intent(MainActivity.this,secondactivity.class); String data="hello this is from firstactivity";//要传递的数据 intent.putExtra("para1",data);//为传递的数据命名,并添加进intent中 startActivity(intent); } });
其次在第二个页面中写下如下代码
Intent intent=getIntent();//获取上个页面传来的intent String data=intent.getStringExtra("para1");//通过名字获取该名字的值返回数据给上一个活动
1.使用按钮
使用startactivityforresult
首先第一个页面代码如下:每个页面的返回结果都会回调onactivityresult方法
to_secondactivity.setonClickListener(new View.onClickListener() { @Override public void onClick(View view) { Intent intent=new Intent(MainActivity.this,secondactivity.class); startActivityForResult(intent,1);//第一个参数intent,第二个参数请求码唯一 } }); @Override protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { //第一个参数请求码,第二个返回结果码,第三个带数据的intent super.onActivityResult(requestCode, resultCode, data); //检查是哪一个请求码 switch (requestCode){ case 1: if(resultCode==RESULT_OK){ String returndata=data.getStringExtra("data_return");//通过intent和数据名获取数据 Toast.makeText(MainActivity.this,returndata,Toast.LENGTH_SHORT).show(); } break; default: } }
第二个页面代码如下:使用setresult向上一个页面传数据
back.setonClickListener(new View.onClickListener() { @Override public void onClick(View view) { Intent intent=new Intent(); intent.putExtra("data_return","this is from secondactivity"); setResult(RESULT_OK,intent);//专门用于向上一个页面传递数据,第一个参数向上一个活动返回结果,第二个参数将带有参数的intent返回 finish(); } });声明周期测试
首先创建三个activity
将其中一个activity注册为对话框形式如下
//通过以上代码将该活动注册为对话框
测试七个生命周期,代码如下:
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Log.d(TAG,"onCreate"); setContentView(R.layout.activity_main); startNormalActivity=findViewById(R.id.start_normal_activity); startDialogActivity=findViewById(R.id.start_dialog_activity); startNormalActivity.setonClickListener(new View.onClickListener() { @Override public void onClick(View view) { Intent intent=new Intent(MainActivity.this,NormalActivity.class); startActivity(intent); } }); startDialogActivity.setonClickListener(new View.onClickListener() { @Override public void onClick(View view) { Intent intent=new Intent(MainActivity.this,Dialogactivity.class); startActivity(intent); } }); } @Override protected void onStart() { super.onStart(); Log.d(TAG,"onStart"); } @Override protected void onResume() { super.onResume(); Log.d(TAG,"onResume"); } @Override protected void onPause() { super.onPause(); Log.d(TAG,"onPause"); } @Override protected void onStop() { super.onStop(); Log.d(TAG,"onStop"); } @Override protected void onDestroy() { super.onDestroy(); Log.d(TAG,"onDestory"); } @Override protected void onRestart() { super.onRestart(); Log.d(TAG,"onRestart"); }
在页面创建是执行onCreate(),在页面创建完成后执行onStart(),在页面准备好与用户交互时执行onResume(),以上三个生命周期都是页面处于栈顶的时候
当跳转到正常页面时,在系统准备去启动或恢复一个活动时调用onPause(),当活动完全不可用时调用onStop()。
当从一个活动回到另一个活动时,先调用onRestart():由停止变为运行时调用,
再当页面由不可见变为可见时调用onStart(),之后在页面准备好与用户进行交互时调用onResume()
当页面调用一个对话框时,只执行onPause()
从对话框返回时只执行onResume()
活动实践1.知晓在哪个活动
新建一个baseActivity类,继承AppCompatActivity,重写onCreate方法,让他们打印活动的名字
之后将所有页面都继承自baseActivity
public class baseActivity extends AppCompatActivity { @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); Log.d("baseActivity",getClass().getSimpleName()); } }
2.随时随地退出程序
方法:新建一个activitycollector类作为活动管理类,在其中我们通过list暂存活动,,提供一个addActivity方法用于向list中添加活动,提供一个removeActivity方法用于从list中移除活动,最后提供一个finishall将list中存储的活动全部销毁
在baseActivity类中onCreate方法中调用activitycollector的addactivity方法
onDestroy方法中调用activitycollector的removeactivity方法
在任何地方调用activitycollector的finish方法。
public class ActivityCollector { public static List activityList=new ArrayList<>(); public static void addActivity(Activity activity){ activityList.add(activity); } public static void removeActivity(Activity activity){ activityList.remove(activity); } public static void finishAll(){ for(Activity activity:activityList){ if(!activity.isFinishing()){ activity.finish(); } } activityList.clear(); } }
3.启动活动的最佳方法
添加一个actionStart()方法,,在这个方法中完成Intent的构建,另外还有需要传递的数据。
public static void actionStart(Context context,String data1,String data2){ Intent intent=new Intent(context,secondactivity.class); intent.putExtra("param1",data1); intent.putExtra("param2",data2); context.startActivity(intent); }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)