上次的文章提到的用全局变量来实现对数据的传递,而这次采用的是剪切板来实现对数据的传递
这里要注意:在Activity之间传递数据还可以利用一些技巧,不管windows还是Linux操作系统,都会支持一种叫剪切板的技术,也就是某一个程序将一些数据复制到剪切板上,然后其他的任何程序都可以从剪切板中获取数据,在Android系统中也存在此技术。
使用剪切板会用到,ClipboardManager对象,这个对用剪切板会用到,ClipboardManager象用来操作剪切板,但是没有提供public的构造函数(单例模式),需要使用Activity.getSystemService(Context.CLIPBOARD_SERVICE)获取该对象。
在Android-11(Android 3.0)版本之前,利用剪切板传递数据使用setText()和getText()方法,但是在此版本之后,这两个方法就被弃用,转而使用传递ClipData对象来代替。相对于getText和setText而言,利用ClipData对象来传递数据,更符合面向对象的思想,而且所能传递的数据类型也多样化了。
剪切纯粹的字符串,具体代码
MainActivity.java
<span style="font-size:14px;">package net.csdn.blog;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.ClipData;
import android.content.ClipboardManager;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class MainActivity extends Activity {
private Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button = (Button) findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@SuppressLint("NewApi")//代码高级优化,自带,自动改错时可选择忽略
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
ClipboardManager clickManager = (ClipboardManager)
getSystemService(Context.CLIPBOARD_SERVICE);//</span><span style="font-size:14px;">获取剪切板
String name = "Jack";
clickManager.setPrimaryClip(ClipData.newPlainText("data", name));
//直接通过ClipboardManager对象中的setPrimaryClip(ClipData clip)来设置数据类
</span><pre name="code" class="java"><pre name="code" class="java"><span style="font-size:14px;"> //ClipData.newPlainText("data", name)设置用于初始化数据的内容</span>
//intent的声明和启动意图
Intent intent = new Intent(MainActivity.this,OtherActivity.class);startActivity(intent);}});}} OtherActivity.java
<span style="font-size:14px;">package net.csdn.blog;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.ClipData;
import android.content.ClipboardManager;
import android.os.Bundle;
import android.widget.TextView;
public class OtherActivity extends Activity {
private String content;
private TextView textView;
@SuppressLint("NewApi")
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.other);
ClipboardManager clipManager = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
ClipData clipData =clipManager.getPrimaryClip();
content = clipData.getItemAt(0).getText().toString();
textView = (TextView) findViewById(R.id.msg);
textView.setText(content);
}
}</span>
main.xml
<span style="font-size:14px;"><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="${relativePackage}.${activityClass}" >
<Button
android:id="@+id/button"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/button_name" />
</RelativeLayout></span>
o
ther.xml
<span style="font-size:14px;"><?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<TextView
android:id="@+id/msg"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
</TextView>
</LinearLayout></span>
AndroidManifest
需要添加
<span style="font-size:14px;">
<activity
android:name=".OtherActivity"
></activity></span>
剪切对象,具体代码
MainActivity.java
package net.csdn.blog;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.ObjectInput;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.ClipData;
import android.content.ClipboardManager;
import android.os.Bundle;
import android.util.Base64;
import android.widget.TextView;
public class OtherActivity extends Activity {
private String content;
private TextView textView;
@SuppressLint("NewApi")
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.other);
ClipboardManager clipboardManager = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
ClipData clipData =clipboardManager.getPrimaryClip();
content = clipData.getItemAt(0).getText().toString();
textView =(TextView) findViewById(R.id.msg);
byte [] base64_byte=Base64.decode(content, Base64.DEFAULT);
ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(base64_byte);
try {
ObjectInputStream objectInputStream = new ObjectInputStream(byteArrayInputStream);
MyData myData = (MyData) objectInputStream.readObject();
textView.setText(myData.toString());
} catch (Exception e) {
// TODO: handle exception
}
}
}
OtherActivity.java
package net.csdn.blog;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.ObjectInput;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.ClipData;
import android.content.ClipboardManager;
import android.os.Bundle;
import android.util.Base64;
import android.widget.TextView;
public class OtherActivity extends Activity {
private String content;
private TextView textView;
@SuppressLint("NewApi")
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.other);
ClipboardManager clipboardManager = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
ClipData clipData =clipboardManager.getPrimaryClip();
content = clipData.getItemAt(0).getText().toString();
textView =(TextView) findViewById(R.id.msg);
byte [] base64_byte=Base64.decode(content, Base64.DEFAULT);
ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(base64_byte);
try {
ObjectInputStream objectInputStream = new ObjectInputStream(byteArrayInputStream);
MyData myData = (MyData) objectInputStream.readObject();
textView.setText(myData.toString());
} catch (Exception e) {
// TODO: handle exception
}
}
}
MyData.java
package net.csdn.blog;
import java.io.Serializable;
public class MyData implements Serializable {
private String name;
private String age;
public MyData(String name, String age) {
super();
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "MyData [name=" + name + ", age=" + age + "]";
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
}
main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="${relativePackage}.${activityClass}" >
<Button
android:id="@+id/button"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/msg" />
</RelativeLayout>
other.xml
<span style="font-size:14px;"><?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<TextView
android:id="@+id/msg"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
</TextView>
</LinearLayout></span>
AndroidManifest需要添加
<span style="font-size:14px;">
<activity
android:name=".OtherActivity"
></activity></span>