生产实习(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:

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

    <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
        为main通常欢迎页面为运行的入口。

(4)Activity之间的跳转。

(5)Activity返回数据。

(6)使用AlertDialog显示自定义布局对话框。



一、Activity

页面间的跳转。

通过include<减少重写代码的次数

如果多个Activity中出现相同的内容,可以把相同的内容单独放在一个布局文件中,在通过<include layout=""/>把布局文件引入到当前页面。对控件的使用方式不变。


上午第一个任务实现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();


如何从一个Activity返回另一个Activity

(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);
}
</pre><p></p><p>(2)通过静态变量实现数据的传递。如果使用过多会造成内存不足,故不建议采用。</p><p>先创建一个类,其中创建一个静态变量用于保存数据。缺点:占用内存过高。</p><p></p><pre name="code" class="java">package com.neu.util;

import java.util.HashMap;
import java.util.Map;

public class Dateutil 
{
    public static Map<String,String> map=new HashMap<String,String>();
}

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

}


setResult(resultCode, data);
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;
	
	@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();
	}
}

使用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;
	@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();
		}
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值