menu,显示intent,隐式Intent,生命周期,活动实践

menu,显示intent,隐式Intent,生命周期,活动实践,第1张

menu,显示intent,隐式Intent,生命周期,活动实践 menu使用

首先添加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);
}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5708164.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存