美文网首页AndroidAndroid开发程序员
02探究活动-活动的最佳实践

02探究活动-活动的最佳实践

作者: 何惧l | 来源:发表于2018-03-16 09:57 被阅读7次

知晓当前的是在哪一个活动

  1. 首先新建一个BaseActivity类,创建的是普通的类,继承AppCompatActivity,并且重写这个onCreate()方法
public class BaseActivity extends AppCompatActivity {
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // 获取当前实例的类名
        Log.d("BaseActivity",getClass().getSimpleName());
    }
}
  1. 这个时候让所有的ActivityTest项目中的活动都继承自BaseActivity,因为这个类又是继承AppCompatActivity,所以项目中的活动并不受影响
// 继承子自己定义的
public class MainActivity extends BaseActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main_layout);

        Button but_1 = (Button)findViewById(R.id.but_1);
        but_1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(MainActivity.this,SecondActivity.class);
                startActivity(intent);
            }
        });

    }
}


  1. 这个时候,点击按钮分别进入MainActivity,SecondActivity,ThirdActivity中


    2018-03-16_09-11-24.png

    每当进入到一个活动,该活动的类名就会被打印

随时随地的退出程序

此时还停留在ThirdActivity页面中,这个时候得按三次Back键才可以退出程序,按Home键只是把程序挂起,并没有退出程序,这个时候得需要一个注销的功能,随时随地能直接的退出程序

  1. 需要创建一个专门的集合对所有的活动那个进行管理,新建一个ActivityCollector类作为活动的管理器
public class ActivityCollector {

    public static List<Activity> activities = new ArrayList<>();

    // 用于添加到这个集合
    public static void addActivity(Activity activity){
        activities.add(activity);
    }

    // 把这个活动从集合中移除
    public static void removeActivity(Activity activity){
        activities.remove(activity);
    }
    
    // 把存在的活动都销毁
    public static void finishAll(){
        for (Activity activity:activities){
            if (!activity.isFinishing()){
                activity.finish();
            }
        }
    }

}

  1. 这个时候修改BaseActivity中的代码
public class BaseActivity extends AppCompatActivity {
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // 获取当前实例的类名
        Log.d("BaseActivity",getClass().getSimpleName());
        // 获取当前活动添加到集合中
        ActivityCollector.addActivity(this);
    }
    
    // 重写这个销毁方法,当活动销毁的时候从集合中移除
    @Override
    protected void onDestroy() {
        super.onDestroy();
        ActivityCollector.removeActivity(this);
    }
}
  1. 这个时候不管你在什么地方就可以随时的退出程序了,只需调用这个finishAll()这个方法即可,在最后的这个页面调用
public class ThirdActivity extends BaseActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_third);

        Button but_1 = (Button)findViewById(R.id.but_1);
        but_1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
               ActivityCollector.finishAll();
            }
        });
    }
}

此时当点击到这个ThirdActivity页面中的按钮的时候,就直接退出程序了

启动活动的最佳写法

启动活动使用Intent构建当前想去的布局,然后调用startActivity()或者startActivityForResult()方法将活动启动起来,如果要有数据从一个活动传递到另一个活动,也可以使用Intent来实现

  1. 例在SecondActivity中要用到两个字符串参数,在启动SecondActivity的时候就必须要传递过来,那么就是
  but_1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(MainActivity.this,SecondActivity.class);
                intent.putExtra("param1","data1");
                intent.putExtra("param2","data2");
                startActivity(intent);
            }
        });

  1. 这样是没有任何问题的,但是这样写有时会产生麻烦,这个就得换一种写法了,在SecondActivity中修改代码


public class SecondActivity extends BaseActivity {

    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);
    }

}

在SencdongActivity中添加了一个actionStart()的方法,这个方法完成了Intent的构建,所有SecondActivity中需要的数据都是通过actionStart()方法的参数传递过来的,饭后把它存储到Inten中,最后调用startActivity()方法启动SecondActivity

  1. 这样写的好处是一目了然,SecondActivity所需要的参数既可以全部体现出来了,只要一行代码就可以启动SecondActivity了,在MainActivity中

public class MainActivity extends BaseActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main_layout);

        Button but_1 = (Button)findViewById(R.id.but_1);
        but_1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                // 只需要一行就可以启动SecondActivity了
                SecondActivity.actionStart(MainActivity.this,"data1","data2");
            }
        });

    }
}

这样在SecondActivity中就可以得到传递的数据了

相关文章

  • 02探究活动-活动的最佳实践

    知晓当前的是在哪一个活动 首先新建一个BaseActivity类,创建的是普通的类,继承AppCompatActi...

  • 活动的最佳实践

    一、知晓当前在哪一个活动 新建一个 BaseActivity 继承自 Activity,重写 onCreate()...

  • 02探究活动-活动的启动模式

    启动模式一共四种,分别是standard,singleTop,singleTask,singleInstance,...

  • 活动的最佳实践(Activity)

    你已经掌握了相关活动非常多的知识,不过恐怕离完全灵活运用还有一段距离。虽然知识点只有这么多,但运用的技巧却是多种多...

  • 02探究活动-活动的生命周期

    返回栈 android中的活动是可以层叠的,每启动一个活动,就会覆盖在原活动之上,然后点击Back键会销毁坐上面的...

  • 内容摘要

    关键词:高中语文 实践活动 分类探究 内容摘要:高中学生正值青春期,渴求实践,勇于接受挑战。综合性实践活动可以系...

  • 一路行走

    边学习边思考: 一、如何挖掘周礼文化内涵,让传承传统文化与孩子们的实践活动、探究活动、DTI项目活动。我们生长的地...

  • 02探究活动-基本用法

    首先创建一个空的项目 Add No Activity手动创建活动 在活动中使用Toast 先在界面上定义一个按钮,...

  • 张贵栓:五年级语文实践活动中“学业质量”的关键表现

    语实践活动是在“识字与写字、阅读与鉴赏、表达与交流、梳理与探究”中进行的。在实践活动过程中,学生要表现出“阅读力、...

  • 学科实践与探究活动的区别

    04学科实践活动操作 学科实践活动就是围绕一个大问题、大任务,按照学科逻辑和学习逻辑精心设计的完整有序的系列组合活...

网友评论

    本文标题:02探究活动-活动的最佳实践

    本文链接:https://www.haomeiwen.com/subject/iyrlqftx.html