android 页面切换
2016-04-25 10:45
549 查看
通用的页面跳转方法有两种:
1、Intent
Intent适合Activity与Activity之间的跳转,按返回键可以直接返回前一页面
缺点:需要到Manifest注册Activity
2、setContentView
相当于选项卡,适合同一Activity里的不同View之间跳转
优点:按返回键不会返回到前一页面,需要自己添加按键监听代码来实现
只切换Layout运行速度会快点,因为启动activity是最耗时的。
数据传递也简单,不用Intent.setExtra之类的。
缺点是所有控件的事件处理、加载之类的操作全集中由activity管理,拆分不够清晰
补充:intend方式传参
在上面的代码中,我们可以看到使用Bundle来存储数据,并将其putExtras到Intent里面。Bundle使用“名字-值”来存储数据。那么,从原来的Activity A传送数据到新的Activity B, Activity B如何获取传送过来的Intent参数时呢?最近写了这样的一个例子:
In Activity A:
In Activity B:
1、Intent
Intent适合Activity与Activity之间的跳转,按返回键可以直接返回前一页面
缺点:需要到Manifest注册Activity
2、setContentView
相当于选项卡,适合同一Activity里的不同View之间跳转
优点:按返回键不会返回到前一页面,需要自己添加按键监听代码来实现
只切换Layout运行速度会快点,因为启动activity是最耗时的。
数据传递也简单,不用Intent.setExtra之类的。
缺点是所有控件的事件处理、加载之类的操作全集中由activity管理,拆分不够清晰
import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.KeyEvent; import android.view.View; import android.view.View.OnClickListener; import android.widget.*; public class IntentTest extends Activity { private LinearLayout mainView=null; private Button button1=null; private Button button2=null; private LinearLayout layout=null; private TextView tv=null; /* * 由于setContentVeiw()函数返回是void,系统中没有提供获取当前View的函数 * 所以此处添加一个整形变量用来指示当前View的id */ private int currentViewId; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //tv初始化 tv=new TextView(this); tv.setText("这是layout里面的tv"); //layout初始化 layout=new LinearLayout(this); layout.setId(100);//这里需要指定id,否则默认的id会和mainView一样,都是-1 layout.setLayoutParams(new LinearLayout.LayoutParams(-1,-1)); layout.addView(tv); //button1初始化 button1=new Button(this); button1.setLayoutParams(new LinearLayout.LayoutParams(-2,-2)); button1.setText("Intent方式跳转"); button1.setOnClickListener(new OnClickListener(){ public void onClick(View v) { /*此处用Intent来实现Activity与Activity之间的跳转*/ Intent intent=new Intent(); intent.setClass(IntentTest.this,MyActivity.class); //Intent intent=new Intent(IntentTest.this,MyActivity.class); startActivity(intent); } }); //button2初始化 button2=new Button(this); button2.setLayoutParams(new LinearLayout.LayoutParams(-2,-2)); button2.setText("setContentView方式跳转"); button2.setOnClickListener(new OnClickListener(){ public void onClick(View v) { //此处用setContentView方式来实现统一Activity不同View跳转 setCurrentView(layout); } }); //mianView初始化 mainView=new LinearLayout(this); mainView.setId(1000);//指定id mainView.setLayoutParams(new LinearLayout.LayoutParams(-1,-1)); mainView.setOrientation(LinearLayout.VERTICAL); mainView.addView(button1); mainView.addView(button2); //显示mainView setCurrentView(mainView); } /* * 这里重写onKeyDown()函数,实现返回键的监听 * 如果通过显示的View对keyListener进行监听,则返回键监听不到 * 所以此处是通过在Activity里面重写onKeyDown()函数来实现监听 * 此处如果不拦截监听的话,在显示layout后按返回键则直接执行退出程序 */ public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { if(currentViewId==layout.getId()){ setCurrentView(mainView); }else{ System.exit(0); } return false; } return false; } /*自定义函数setCurrentView()*/ public void setCurrentView(View view){ currentViewId=view.getId(); //此处用setContentView方式来实现统一Activity不同View跳转 setContentView(view); } }
import android.app.Activity; import android.os.Bundle; import android.widget.TextView; public class MyActivity extends Activity{ public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); TextView tv=new TextView(this); tv.setText("我是MyActivity里的tv"); setContentView(tv); } }
补充:intend方式传参
Activity传送数据
在上面的代码中,我们可以看到使用Bundle来存储数据,并将其putExtras到Intent里面。Bundle使用“名字-值”来存储数据。那么,从原来的Activity A传送数据到新的Activity B, Activity B如何获取传送过来的Intent参数时呢?最近写了这样的一个例子:In Activity A:
// 在某个按钮响应事件里 Intent intent = new Intent(this, TextInputActivity.class); intent.putExtra("Text", mText); intent.putExtra("TextColor", mTextColor); intent.putExtra("TextSize", mTextSize); intent.putExtra("TextBold", mTextBold); startActivityForResult(intent, REQUEST_TEXT);
In Activity B:
// in onCreate(Bundle savedInstanceState) Bundle extras = getIntent().getExtras(); mText = extras.getString("Text"); mTextColor = extras.getInt("TextColor"); mTextSize = extras.getFloat("TextSize"); mTextBold = extras.getBoolean("TextBold");
相关文章推荐
- AndroidStudio经常遇到的问题解决方案
- android 学习准备
- 查看Android ADT 版本
- android内存分析
- Android性能优化
- Android 为操作加音效,加声音。提高用户交互,增加粘性,可以选择声音的添加
- Android 烦人的坐标原点
- android Native堆
- android Native堆
- android Native堆
- android so文件的加载过程以及常规错误处理
- Android 开发推荐书籍
- Android内存溢出提示android.view.InflateException: Binary XML file解决方案
- android自定义控件实例
- 89、Android EditText 悬浮停靠
- Android Studio 代码模板的配置
- [Android Pro] android 杀死进程的方法
- 2016.4.25Android总结
- Android触摸事件onTouchEvent和onInterceptTouchEvent该返回什么?
- Android安全攻防战,反编译与混淆技术完全解析(上)