一天的内容:
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;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_re);
findView();
setListener();
}
private void setListener()
{
this.textAddressValue.setOnClickListener(new View.OnClickListener()
{
@Override
public 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);
}
@Override
public 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;
}
}
}
}
此方法专门用于处理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;
@Override
protected 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);
}
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
getMenuInflater().inflate(R.menu.cities, menu);
return true;
}
@Override
public 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();
}
}
创建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;
@Override
protected 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()
{
@Override
public 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()
{
@Override
public 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()
{
@Override
public 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();
}
}
}