关闭

Intent实现跳转

126人阅读 评论(0) 收藏 举报
分类:

1.注意事项:因为手机屏幕发生旋转就会导致onCreate()方法重新加载,这就导致之前textView控件的数据重新加载,导致原有输入的数据的丢失,如下:

  @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        textView = (TextView) findViewById(R.id.main_tv);
        textView.setOnClickListener(this);
        if (savedInstanceState != null){//
            CharSequence chars = savedInstanceState.getCharSequence("textView");
            textView.setText(chars);
        }
    }

    @Override
    protected void onSaveInstanceState(Bundle outState) {//实现该方法解决上述问题,当手机屏幕发生反转时,“点击”也不会变成“<span style="font-family: Arial, Helvetica, sans-serif;">hello World!</span>”
        super.onSaveInstanceState(outState);
        outState.putCharSequence("textView",textView.getText());
    }

    @Override
    public void onClick(View v) {
        ((TextView) v).setText("点击");
    }

2.onNewIntent()方法的功能

在SeconedActivity的android:launchMode="singleTask"模式下,通过intent实现MainActivity------->SeconedActivity------->MainActivity------->SenconedActivity的连续跳转,第一次MainActivity------->SeconedActivity时EditText控件的输入的数据为“123”,跳转到SeconedActivity是textView控件显示的为“123”,第二次MainActivity------->SeconedActivity时EditText控件的输入的数据为“456”,跳转到SeconedActivity是textView控件仍然显示的为“123”,这时因为SecondActivity被重新初始化了。当调用onNewIntent()方法时,这时第二次跳转的时候就会textView控件就会显示“456”了。实例如下:

 <activity
            android:name=".MainActivity" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".SeconedActivity" android:launchMode="singleTask"></activity>//设置为singleTask

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    private TextView textView;
    private EditText editText;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        textView = (TextView) findViewById(R.id.main_tv);
       editText = (EditText) findViewById(R.id.main_edit);
        textView.setOnClickListener(this);
//        if (savedInstanceState != null){
//            CharSequence chars = savedInstanceState.getCharSequence("textView");
//            textView.setText(chars);
//        }
    }

    @Override
    protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        outState.putCharSequence("textView",textView.getText());
    }

    @Override
    public void onClick(View v) {
       // ((TextView) v).setText("点了一下");
        Intent intent = new Intent(this, SeconedActivity.class);
        intent.putExtra("edit",editText.getText());
        startActivity(intent);
    }
}

public class SeconedActivity extends AppCompatActivity implements View.OnClickListener {

    private TextView textView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_seconed);
        textView = (TextView) findViewById(R.id.main_sec);
        textView.setOnClickListener(this);
        CharSequence chars = getIntent().getCharSequenceExtra("edit");
        textView.setText(chars);
    }

    @Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        CharSequence edit = intent.getCharSequenceExtra("edit");
        textView.setText(edit);
    }

    @Override
    public void onClick(View v) {
        Intent intent = new Intent(SeconedActivity.this, MainActivity.class);
        startActivity(intent);
    }
}

3.ActivityOptionCompat

public class MainActivity extends AppCompatActivity implements View.OnClickListener {


    private static final String TAG = MainActivity.class.getSimpleName();
    private TextView textView;
    private EditText edit;

    /*
    * 可以有构造函数,但是不能有参数。在activity中不要定义是静态属性(static)类型。
    * 依赖于类所存在的
    * */
    public MainActivity() {
        Log.d(TAG, "MainActivity: ");
    }

    /*
        * 创建
        *
        * */
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        textView = (TextView) findViewById(R.id.main_tv);
         edit = (EditText) findViewById(R.id.main_edit);
        textView.setOnClickListener(this);

        if (savedInstanceState != null) {
            CharSequence charSequence = savedInstanceState.getCharSequence("TextView");
            textView.setText(charSequence);
        }
    }
    /*
    * 进入可见状态
    *
    * */
    @Override
    protected void onStart() {
        super.onStart();
    }
    /*
    * 进入可点击状态
    *
    * */
    @Override
    protected void onResume() {
        super.onResume();
    }
    /*
    * 失去焦点
    *
    * */
    @Override
    protected void onPause() {
        super.onPause();
    }
    /*
    * 销毁
    * */
    @Override
    protected void onDestroy() {
        super.onDestroy();
    }

    /*
    * 从后台唤醒
    * */
    @Override
    protected void onRestart() {
        super.onRestart();
    }

    @Override
    protected void finalize() throws Throwable {
        super.finalize();
    }
    /*
    * 系统保护
    *防止屏幕发生翻转导致textView里边的数据丢失
    * */
    @Override
    protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        outState.putCharSequence("textView",textView.getText());
    }

    @Override
    public void onClick(View v) {
        ((TextView) v).setText("已点击");
        //显式启动
        Intent intent = new Intent(this, OtherActivity.class);
        intent.putExtra("textView",edit.getText());
        /*
        * makeScaleUpAnimation这种方式个人感觉用途还是很广的,
        * 效果就是不断的放大一个view,进而进行activity的过度。
        *说明下几个参数,第1个参数是scale哪个view的大小,
        * 第2和3个参数是以view为基点,从哪开始动画,
        * 这里是该view的中心,4和5参数是新的activity从多大开始放大,
        * 这里是从无到有的过程。
        * */
        ActivityOptionsCompat compat = ActivityOptionsCompat.makeScaleUpAnimation(v, v.getWidth() / 2, v.getHeight() / 2, 0, 0);
        ActivityCompat.startActivity(this,intent,compat.toBundle());//v4兼容包,api4以上的(硬件不支持除外)
        //startActivity(intent);
        //隐式启动
//        Intent intent = new Intent(Intent.ACTION_MAIN);
//        intent.addCategory(Intent.CATEGORY_LAUNCHER);
//        startActivity(intent);
        //自定义隐式启动
//        Intent intent = new Intent("com.example.wwj.activitydemo.OTHER");
//        intent.addCategory("com.example.wwj.activitydemo.OtherCategory");
       // startActivity(intent);
 //       Intent intent = new Intent(Intent.ACTION_DIAL, Uri.parse("tel;12345"));
//        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);//设置一个新栈
//        intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);//
      //  startActivity(intent);

    }
}


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:21751次
    • 积分:801
    • 等级:
    • 排名:千里之外
    • 原创:42篇
    • 转载:8篇
    • 译文:18篇
    • 评论:1条
    文章分类
    最新评论