您的位置:首页 > 移动开发 > Android开发

生产实习(Android)四

2015-12-22 22:58 387 查看
一天的内容:

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();
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: