生产实习(Android)四
一天的内容:
1、include:再一个布局文件中引用另一个布局文件
2、在Android项目中如何创建一个Activity
(1)必须继承自Activity类
(2)重写onCreate方法,通过setContentView加载显示的布局文件
(3)在AndroidManifest.xml文件中配置Activity
android:name 对应的是Activity类
android:label 对应的事标题
android:screenOrientation 当前页面是那种方式显示。用横屏还是竖屏。 默认根据手机自动识别。
android:screenOrientation=landscape表示强制横屏。
所有Activity都必须在application下配置,有且只有一个Activity包含intent-filter:
为main通常欢迎页面为运行的入口。 (4)Activity之间的跳转。
(5)Activity返回数据。
(6)使用AlertDialog显示自定义布局对话框。
一、Activity
页面间的跳转。
通过include<减少重写代码的次数
如果多个Activity中出现相同的内容,可以把相同的内容单独放在一个布局文件中,在通过
上午第一个任务实现Activity的跳转
Activity之间如何跳转
(1)登录成功后跳转到主页面,在主页面中显示登录人的信息
(2)Startintent()用于页面间的跳转
(3)Android内有一个ActivityStack。用于页面间的跳转。
(4)调用finish()时,Activity相当于自杀,便调用不了之后的Activity。点击手机的“退出”键相当于把ActivityStack内的内容全部销毁。
附:实际开发的时候尽量少使用l、1、O、0。
l用于命名中
1用于下划线后
Activity跳转的步骤:
创建一个Intent,创建的同时指明跳转的从哪开始,跳转到那个类中。
Intent intent=new Intent(当前Activity的对象,目标Activity的类型);
Intent intent=new Intent(LoginActivity.this,MainActivity.class);
从LoginActivity跳转到MainActivity。 通过startActivity的方法启动意图。
startActivity(intent);
如果当前Activity不需要在显示,可以调用finish()方法结束当前的Activity。 finish();
(1)第一个Activity不能finish()
(2)第二个Activity只需要自己执行finish()即可。
Activity之间传递数据
(1)通过intent实现数据的传递,这是标准方式。一般都会使用集合来存储数据。Map集合传递数据。
第一个Activity
创建一个Intent对象,通过Intent中的putExtra方法绑定数据。添加要传递的数据。启动意图。
第二个Activity
通过getIntent方法获取传递的意图,再通过Intent的getXxxExtra方法获取指定key对应的数据。
通过putExtra放入的类型,就要通过哪种类型获取。
例如:
public void onClick(View v) {String name=editusername.getText().toString();Intent intent=new Intent(LoginActivity.this,MainActivity.class);intent.putExtra("user_name", name);intent.putExtra("sex", "男");startActivity(intent);}private void findView()
{ this.btnBack=(Button) findViewById(R.id.main_btn_back); this.textmsg=(TextView) findViewById(R.id.main_text_msg); this.textmsg.setText(msg);Intent intent=getIntent(); //获取传递的意图String msg=intent.getStringExtra("user_name");this.textmsg.setText(msg);
}
(2)通过静态变量实现数据的传递。如果使用过多会造成内存不足,故不建议采用。
先创建一个类,其中创建一个静态变量用于保存数据。缺点:占用内存过高。
package com.neu.util;import java.util.HashMap;import java.util.Map;public class Dateutil { public static Mapmap=new HashMap ();}public void onClick(View v) {String name=editusername.getText().toString();Dateutil.map.put("username", name);}private void findView() {this.btnBack=(Button) findViewById(R.id.main_btn_back);this.textmsg=(TextView) findViewById(R.id.main_text_msg);String msg=Dateutil.map.get("username");this.textmsg.setText(msg);}
(3)通过文件的方式传递数据。
(4)通过数据库实现。
必须注意使用的id是否在当前的布局文件中
Activity返回数据:
startActivityForResult(intent,requestCode);
第二个参数表示请求码,用于区分各个请求
package com.example.demo_12_22_pm_back_result;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.view.Menu;import android.view.View;import android.widget.TextView;public class RegActivity extends Activity {private TextView textAddressValue;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_re);findView();setListener();}private void setListener() {this.textAddressValue.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Intent intent=new Intent(RegActivity.this,CitiesActivity.class);//startActivity(intent);startActivityForResult(intent, 110);}});}private void findView() {this.textAddressValue=(TextView) findViewById(R.id.reg_text_aaddress_value);}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {getMenuInflater().inflate(R.menu.re, menu);return true;}protected void onActivityResult(int requestCode, int resultCode, Intent data) {if(resultCode==200){switch(requestCode){case 110:String city=data.getStringExtra("city");textAddressValue.setText(city);break;default:break;}}}}
resultcode返回码,可根据返回码判断是否正确返回。data用于封装返回的数据,习惯上所有页面的返回码要一致。返回的时候不需要指定返回目标,从哪来默认回到哪里去。
此方法专门用于处理Acivity返回的结果。
requestcode表示请求码。
resultcode表示响应码。
data表示返回的数据。
package com.example.demo_12_22_pm_back_result;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.view.Menu;import android.view.View;import android.view.View.OnClickListener;import android.widget.TextView;import android.widget.Toast;public class CitiesActivity extends Activity implements OnClickListener{private TextView textQingdao;private TextView textYantai;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_cities);findView();setListener();}private void setListener() {this.textQingdao.setOnClickListener(this);this.textYantai.setOnClickListener(this);}private void findView(){this.textQingdao=(TextView) findViewById(R.id.city_text_qingdao);this.textYantai=(TextView) findViewById(R.id.city_text_yantai);}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {getMenuInflater().inflate(R.menu.cities, menu);return true;}@Overridepublic void onClick(View v) {String city=null;switch(v.getId()){ case R.id.city_text_qingdao: city="青岛"; break; case R.id.city_text_yantai: city="烟台"; break;default:break;}Toast.makeText(this, city, 1000).show();Intent intent=new Intent();intent.putExtra("city", city);setResult(200, intent);finish();}}
使用AlertDialog显示自定义布局对话框。
创建xml文件解析器
LayoutInflater inflater=LayoutInflater.from(MainActivity.this);
把布局文件解析为视图
View view=inflater.inflate(R.layout.login, null);
package com.example.demo_12_22_pm_alert;import java.lang.reflect.Field;import android.app.Activity;import android.app.AlertDialog;import android.content.DialogInterface;import android.os.Bundle;import android.view.LayoutInflater;import android.view.Menu;import android.view.MenuItem;import android.view.View;import android.widget.EditText;import android.widget.ImageView;public class MainActivity extends Activity {private ImageView imageView;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);findView();setListener();}private void findView() {this.imageView=(ImageView) findViewById(R.id.imageView1);}private void setListener() {this.imageView.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {LayoutInflater inflater=LayoutInflater.from(MainActivity.this);View view=inflater.inflate(R.layout.login, null);final EditText edItLoginName=(EditText) view.findViewById(R.id.login_edit_loginname);AlertDialog.Builder alert=new AlertDialog.Builder(MainActivity.this);alert.setTitle("请登录");alert.setCancelable(false);alert.setView(view);alert.setPositiveButton("登录", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {String name=edItLoginName.getText().toString();edItLoginName.setError("格式有误!");setShowing(dialog,false);System.out.println("========="+name);}});alert.setNegativeButton("取消", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {setShowing(dialog, true);}});alert.show();}});}private void setShowing(DialogInterface dialog,boolean flag) {try {Field f=dialog.getClass().getSuperclass().getDeclaredField("mShowing");f.setAccessible(true);f.set(dialog, flag);} catch (Exception e) {e.printStackTrace();}}}
更多相关文章
- Android中的五大布局和logcat打印日志
- Android编译过程总结及android中各种img文件的作用以及系统启动
- Android 数据存储之 SQLit
- Android相对布局管理器RelativeLayout
- android开发小技巧(2)背景按钮等布局的好朋友shape应用
- Android数据存储(一)
- Android应用数据存储几种方式(1)