一、找到ListView
1.布局中设置一个ListView
2.MainActivity中找到控件
二、设置数据
1.定义一个String数组objects,将复制的祝福语放入数组中
2.建一个ListView要显示的每个条目的布局:item
3.设置数据
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,R.layout.item,objects);
4.设置适配器
lv.setAdapter(adapter);
5.给ListView设置点击事件
lv.setOnItemClickListener(new OnItemClickListener(){
//当ListView的一个条目被点击的时候调用
@Override
public void onItemClick(AdapterView<?> parent,View view,int position,long id){
//【6】把点击条目的数据取出来
String content = object[position];
//【7】跳转到发送短信页面,根据短信应用的清单配置
/*
<intent-filter>
<action android:name="android.intent.action.SEND"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:mimeType="text/plain"/>
</intent-filter>
*/
Intent intene = new Intent();
//【7.1】设置action
intent.setAction("android.intent.action.SEND");
//【7.2】添加category
intent.addCategory("android.intent.category.DEFAULT");
//【7.3】设置type
intent.setType("text/plain");
//【7.4】传递数据
intent.putExtra("sms_body",content); //通过查看源码,找接受数据getStringExtra()方法中的键确定sms_body
//【8】跳转到发送短信页面
startActivity(intent);
}
});
三、短信发送器
总结:短信大全案例与人品查看器共同点,都有A界面跳转到B界面,然后把A界面数据传递到B界面
短信发送器:从A跳转到B界面,返回B界面中数据
实现:
1.画布局,找到控件
2.实现点击“+”按钮跳转到模拟通讯录。
1)新建PersonActivity ,创建PersonActivity要显示的布局:ListView
2)将模拟数据存入List集合中,每一个ListView元素读取一个List元素
3)将数据返回至MainActivity
3.实现点击“插入模板”按钮跳转到模板界面
与跳转到模拟通讯录做法相同
4.将返回的数据显示到EditView控件上
1)重写onActivityResult() 方法
2)通过请求码或者返回码区别返回的数据显示到控件上
5.点击发送
1)读取控件里面的number,concent
2)获取SmsManager对象
3)发送短信
若内容过长,将短信内容截一下才可发送
具体代码
1.activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<EditText
android:id="@+id/et_phone"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="请输入手机号"
android:layout_marginTop="6dp"/>
<Button
android:onClick="add"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="+"
android:layout_alignParentRight="true"/>
</RelativeLayout>
<EditText
android:id="@+id/et_content"
android:layout_width="match_parent"
android:layout_height="200dp"
android:hint="请输入发送短信的内容"
android:gravity="top"
/>
<Button
android:onClick="insert"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="插入模板"
/>
<Button
android:onClick="send"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="发送"
/>
</LinearLayout>
2.MainActivity
package activitytest.example.com.smsmanager;
import android.content.Intent;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.telephony.SmsManager;
import android.telephony.SmsMessage;
import android.view.View;
import android.widget.EditText;
import java.util.ArrayList;
public class MainActivity extends AppCompatActivity {
EditText et_content;
EditText et_phone;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
et_phone = findViewById(R.id.et_phone);
et_content = findViewById(R.id.et_content);
}
//跳转到联系人
public void add(View v){
Intent intent = new Intent(this,PersonActivity.class);
//startActivity(intent);
//如果点击按钮,跳转到另外一个Activity,并且关闭那个Activity时,想要返回的数据,用下面这个方法
startActivityForResult(intent,1);
}
//当跳转到的Activity页面关闭时会调用此方法
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
if(resultCode == 10){ //使用请求码也一样 requestCode == 1
String phone = data.getStringExtra("phone");
et_phone.setText(phone);
}else if(resultCode == 20){ //requestCode == 2
String muban = data.getStringExtra("muban");
et_content.setText(muban);
}
super.onActivityResult(requestCode, resultCode, data);
}
//点击按钮插入模板
public void insert(View v){
Intent intent = new Intent(getApplicationContext(),InsertActivity.class);
startActivityForResult(intent,2);
}
//点击按钮发送短信
public void send(View v){
String number = et_phone.getText().toString().trim();
String content = et_content.getText().toString().trim();
SmsManager smsManager = SmsManager.getDefault();
ArrayList<String> dirideMessages = smsManager.divideMessage(content);
for(String div : dirideMessages){
smsManager.sendTextMessage(number,null,div,null,null);
}
}
}
3.activity_contact.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<ListView
android:id="@+id/lv"
android:layout_width="match_parent"
android:layout_height="match_parent">
</ListView>
</LinearLayout>
4.item.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
<TextView
android:id="@+id/tv_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:hint="姓名"
android:layout_weight="1"
android:textColor="#000000"
android:textSize="20sp"
/>
<TextView
android:id="@+id/tv_phone"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:hint="电话号码"
android:layout_weight="1"
android:textColor="#000000"
android:textSize="20sp"
/>
</LinearLayout>
5.Person
package activitytest.example.com.smsmanager;
public class Person {
private String name;
private String phone;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
}
6.ContactActivity
package activitytest.example.com.smsmanager;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.List;
public class ContactActivity extends Activity {
ListView lv;
List<Person> lists;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_contact);
lv = findViewById(R.id.lv); //模拟假数据
lists= new ArrayList<Person>();
for(int i = 0 ; i < 20 ; i++ ){
Person p = new Person();
p.setName("张三"+i);
p.setPhone("11"+i);
lists.add(p);
}
//将数据显示到ListView上
lv.setAdapter(new MyAdapter());
//给ListView设置点击事件
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
//获取点中条目的数据
String phone = lists.get(i).getPhone();
//把数据返回给调用者
Intent intent = new Intent();
intent.putExtra("phone",phone);
setResult(10,intent);//把结果返回给调用者
//关闭当前页面
finish();
}
});
}
private class MyAdapter extends BaseAdapter{
@Override
public int getCount() {
return lists.size();
}
@Override
public Object getItem(int i) {
return null;
}
@Override
public long getItemId(int i) {
return 0;
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
View v;
if(view == null){
v = View.inflate(getApplicationContext(),R.layout.item,null);
}else {
v = view;
}
//找到控件并将数据显示到TextView上
TextView tv_name = v.findViewById(R.id.tv_name);
TextView tv_phone = v.findViewById(R.id.tv_phone);
tv_name.setText(lists.get(i).getName());
tv_phone.setText(lists.get(i).getPhone());
return v;
}
}
}
7.item2
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/tv_muban"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="#000000"
android:textSize="20sp"
android:text="模板"
/>
</LinearLayout>
7.InsertActivity
package activitytest.example.com.smsmanager;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView;
public class InsertActivity extends Activity {
ListView lv_muban;
String object[]={"我正在吃饭","我正在开会","我有事不在","请稍等一会"};
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_contact);
lv_muban = findViewById(R.id.lv);
lv_muban.setAdapter(new MyAdapter());
lv_muban.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
String muban = object[i];
Intent intent = new Intent();
intent.putExtra("muban",muban);
setResult(20,intent);
finish();
}
});
}
private class MyAdapter extends BaseAdapter{
@Override
public int getCount() {
return object.length;
}
@Override
public Object getItem(int i) {
return null;
}
@Override
public long getItemId(int i) {
return 0;
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
View v;
if(view == null){
v = View.inflate(getApplicationContext(),R.layout.item2,null);
}else {
v = view;
}
TextView tv_muban = v.findViewById(R.id.tv_muban);
tv_muban.setText(object[i]);
return v;
}
}
}