国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Android - Android學習筆記--使用剪切板在Activity中傳值示例代碼

Android學習筆記--使用剪切板在Activity中傳值示例代碼

2021-02-01 15:35Android開發網 Android

相對于getText和setText而言,利用ClipData對象來傳遞數據,更符合面向對象的思想,而且所能傳遞的數據類型也多樣化了

在Activity之間傳遞數據還可以利用一些技巧,不管windows還是Linux操作系統,都會支持一種叫剪切板的技術,也就是某一個程序將一些數據復制到剪切板上,然后其他的任何程序都可以從剪切板中獲取數據,在Android系統中也存在此技術。

使用剪切板會用到,ClipboardManager對象,這個對用剪切板會用到,ClipboardManager象用來操作剪切板,但是沒有提供public的構造函數(單例模式),需要使用Activity.getSystemService(Context.CLIPBOARD_SERVICE)獲取該對象。

在Android-11(Android 3.0)版本之前,利用剪切板傳遞數據使用setText()和getText()方法,但是在此版本之后,這兩個方法就被棄用,轉而使用傳遞ClipData對象來代替。相對于getText和setText而言,利用ClipData對象來傳遞數據,更符合面向對象的思想,而且所能傳遞的數據類型也多樣化了?!?br />
主要步驟:
通過getSystemService獲取ClipboardManager對象cm。
使用cm.setPrimaryClip()方法設置ClipData數據對象。
在新Activity中獲取ClipboardManager對象cm。
使用cm.getPrimaryClip()方法獲取剪切板的ClipData數據對象,cd。
通過cd.getItemAt(0)獲取到傳遞進來的數據。

示例代碼
保存數據:

復制代碼 代碼如下:


protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button btn=(Button)findViewById(R.id.btn);
btn.setOnClickListener(new View.OnClickListener() {
@SuppressLint("NewApi")
@Override
public void onClick(View v) {
//獲取剪切板
ClipboardManager cm=(ClipboardManager)getSystemService(Context.CLIPBOARD_SERVICE);
cm.setPrimaryClip(ClipData.newPlainText("data", "Jack"));
Intent intent=new Intent(MainActivity.this,otherActivity.class);
startActivity(intent);
}
});
}


讀取數據:

復制代碼 代碼如下:


protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.other);
ClipboardManager cm=(ClipboardManager)getSystemService(Context.CLIPBOARD_SERVICE);
ClipData cd=cm.getPrimaryClip();
String msg=cd.getItemAt(0).getText().toString();
TextView tv=(TextView)findViewById(R.id.msg);
tv.setText(msg);
}


 以上方式使用剪切板傳遞的為String類型的數據,如果需要傳遞一個對象,那么被傳遞的對象必須可序列化,序列化通過實現Serializable接口來標記。
主要步驟:
創建一個實現了Serializable接口的類MyData。
存入數據:獲取ClipboardManager,并對通過Base64類對MyData對象進行序列化,再存入剪切板中。
取出數據:在新Activity中,獲取ClipboardManager,對被序列化的數據進行反序列化,同樣使用Base64類。然后對反序列化的數據進行處理。
示例代碼:
步驟一:

復制代碼 代碼如下:


public class MyData implements Serializable {
private String name;
private int age;
public MyData(String name, int age) {
super();
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}


步驟二:

復制代碼 代碼如下:


protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button btn=(Button)findViewById(R.id.btn);
btn.setOnClickListener(new View.OnClickListener() {
@SuppressLint("NewApi")
@Override
public void onClick(View v) {
//獲取剪切板
ClipboardManager cm=(ClipboardManager)getSystemService(Context.CLIPBOARD_SERVICE);
MyData mydata=new MyData("jack", 24);
String baseToString="";
ByteArrayOutputStream bArr=new ByteArrayOutputStream();
try
{
ObjectOutputStream oos=new ObjectOutputStream(bArr);
oos.writeObject(mydata);
baseToString=Base64.encodeToString(bArr.toByteArray(), Base64.DEFAULT);
oos.close();
}
catch (Exception e)
{
e.printStackTrace();
}
cm.setPrimaryClip(ClipData.newPlainText("data",baseToString));
Intent intent=new Intent(MainActivity.this,otherActivity.class);
startActivity(intent);
}
});
}


步驟三:

復制代碼 代碼如下:


protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.other);
ClipboardManager cm=(ClipboardManager)getSystemService(Context.CLIPBOARD_SERVICE);
ClipData cd=cm.getPrimaryClip();
String msg=cd.getItemAt(0).getText().toString();
byte[] base64_btye=Base64.decode(msg, Base64.DEFAULT);
ByteArrayInputStream bais=new ByteArrayInputStream(base64_btye);
try {
ObjectInputStream ois=new ObjectInputStream(bais);
MyData mydata=(MyData)ois.readObject();
TextView tv=(TextView)findViewById(R.id.msg);
tv.setText(mydata.toString());
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}


總結
綜上所述,使用剪切板傳遞數據有利有弊,剪切板為Android系統管理的,所以在一個地方存入的數據,在這個Android設備上任何應用都可以訪問的到,但是正是因為此設備訪問的都是同一個剪切板,可能會導致當前程序存入的數據,在使用前被其他程序覆蓋掉了,導致無法保證正確獲取數據。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 毛片在线网站 | 无码一区二区三区视频 | 欧美日韩第一页 | 色www精品视频在线观看 | 日本激情视频 | 欧美99热 | 亚洲精彩视频在线 | 精品天堂 | 搡女人真爽免费午夜网站 | 欧美日韩亚洲另类 | 精品国产一区二区三区性色av | 精品精品| 欧美一区二区久久 | 国产精品二区三区 | 国产一区二区三区在线免费 | 亚洲高清视频在线 | 日韩在线免费观看视频 | 成人天堂资源www在线 | 99久久精品一区二区成人 | 91精品国产综合久久久久久丝袜 | 午夜精品久久久久久久 | 亚洲一区在线日韩在线深爱 | 色老头综合网 | 成人亚州 | 成人午夜精品一区二区三区 | 成人看片免费 | 精品乱子伦一区二区三区 | 国产欧美日韩一区二区三区四区 | 国产欧美精品一区二区三区 | 久久久久久久国产 | 国产精品毛片a√一区 | 冥王星之恋泰剧在线观看 | 精品国产一区二区三区日日嗨 | 亚洲xxxx3d| 亚洲天堂高清 | 色婷婷国产精品免费网站 | 性色av一区二区 | 久久69精品久久久久久久电影好 | 欧美激情二区 | 一区二区三区成人 | 成人av视 |