Activity传递数据四种方法

方法一、全局对象

android的全局对象类似于java web中的applican域。除非是android应用程序清除内存,否则全局对象将一直可以访问

使用:

public class MyApp extends Application{
	private String userName;
	//getter,setter
	public void onCreate(){
		setUserName("yaohuiye");
	}
}


public class MainActivity extends Activity{
	private MyApp myApp;
	public void onCreate(){
		button.setOnClickListener(new View.OnClickListener(){
			public void onClick(View v){
				myApp=(MyApp)getApplication();
				myApp.setUserName("hello");
			}
		});
	}
}

方法二、通过剪切板传递数据

使用:

public class Main {
	button.onClick(){
		ClipboardManager clip=(ClipboardManager)getSystemService(Context.CLIPBOARD_SERVICE);
		String name="jack";
		clip.setText(name);
		Intent intent=new Intent(Main.this,OtherActivity.class);
		startActivity(intent);
	}
}

public class OtherActivity{
	ClipboardManager clip=(ClipboardManager)getSystemService(Context.CLIPBOARD_SERVICE);
	String s=clip.getText();
}

剪切一个对象:

public class MyData implements Serializable{
	private String name;
	private String age;
	public MyData(String name,String age){
		this.name=name;
		this.age=age;
	}

	public void toString(){}
}

public class Main{
	button.click(){
		MyData data=new MyData("yaohuiye","23");
		//将对象转换成字符串
		ByteArrayOutputStream byteOS=new ByteArrayOutputStream();
		String base64String="";
		try{
			ObjectOutputStream objOS=new ObjectOutputStream(byteOS);
			objOS.writeObject(data);
			base64String=Base64.encodeToString(byteOS.toByteArray(),Base64.DEFAULT);
			objOS.close();
		}catch{

		}
		ClipboardManager clip=(ClipboardManager)getSystemService(Context.CLIPBOARD_SERVICE);
		clip.setText(base64String);
		Intent intent=new Intent(Main.this,OtherActivity.class);
		startActivity(intent);
	}
}

public class OtherActivity{
	ClipboardManager clip=(ClipboardManager)getSystemService(Context.CLIPBOARD_SERVICE);
	String s=clip.getText().toString();
	byte[] base64_byte=Base64.decode(s,Base64.DEFAULT);
	ByteArrayInputStream byteIS=new ByteArrayInputStream(base64_byte);
	try{
		ObjectInputStream objIS=new ObjectInputStream(byteIS);
		MyData data=(MyData)objIS.readObject();
		txt.setText(data.toString());
	}catch{}
}

方法三、使用意图

Intent是一种运行时绑定 runtime binding机制,它能在程序运行的过程中连接两个不同的组件,通过Intent,程序可以向android表达某种请求或者意愿。

android会根据意愿的内容来选择适当的组件来请求。

Intent起着一个媒体中介的作用,专门提供组件互相调用 的相关信息,实现调用者与被调用 者之间的解耦。

使用:

Intent intent=new Intent(Main.this,OtherActivity.class);
intent.putExtra("name","yaohuiye");
intent.putExtra("age",16);
startActivity(intent);

Intent intent=getIntent();
int age=intent.getIntExtra("age",0);
String name=intent.getStringExtra("name");
注意:

使用Intent可以很方便 的在不同的activity之间传递数据,但局限性是它无法传递不能序列化的对象


方法四、使用静态变量

使用:

public class Main{
	
	button.onClick(){
		Intent intent=new Intent();
		intent.setClass(Main.this,OtherActivity.class);
		otherActivity.age=23;
		otherActivity.name="jack";
		startActivity(intent);
	}

}

public class OtherActivity{
	public static String name;
	public static int age;

}

问题:不仅要向Activity传递数据,也要从Activity中返回数据。

方法:一般是采用Intent对象的方式来返回数据,使用startActivityRorResult方法来显示Activity。

public class Main{
	private final static int REQUESTCODE=1;//返回的结果码

	public void onCreate(){
		button.onClick(){
		Intent intent=new Intent(Main.this,OtherActivity.class);
		startActivityForResult(intent,REQUESTCODE);
		}

	}

	protected void onActivityResult(int requestCode,int resultCode,Intent data){
		if(resultCode==2){
			if(requestCode==REQUESTCODE){
				int three=data.getIntExtra("three",0);
			}
		}
	}
}

public class OtherActivity{
	public void onCreate(){
		button.onClick(){
			Intent intent=new Intent();
			int three=Integer.parseInt(editText.getText().toString());
			intent.putExtra("three",three);
			setResult(2,intent);
			finish();
		}
	}
}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值