您当前的位置: 首页 > 学无止境 > 心得笔记 网站首页心得笔记
53_启动activity并且获取他的返回值
发布时间:2021-03-02 15:04:58编辑:雪饮阅读()
上一篇中完成了主activity中向另外一个activity中传递数据,那么如果这第二个activity中产生了数据要想重新提交回主activity中要如何做。
那么这次实现的效果如
布局文件activity_main.xml:
<?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"
android:orientation="vertical" >
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="选择联系人" />
<EditText
android:id="@+id/et_contact1"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
<Button
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:onClick="click"
android:text="选择第一个联系人"
>
</Button>
<EditText
android:id="@+id/et_contact2"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
<Button
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:onClick="click2"
android:text="选择第二个联系人"
>
</Button>
</LinearLayout>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="选择联系人" />
<EditText
android:id="@+id/et_contact1"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
<Button
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:onClick="click"
android:text="选择第一个联系人"
>
</Button>
<EditText
android:id="@+id/et_contact2"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
<Button
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:onClick="click2"
android:text="选择第二个联系人"
>
</Button>
</LinearLayout>
主activity,MainActivity.java:
package com.example.getresultdata;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
EditText et, et2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
et = (EditText) this.findViewById(R.id.et_contact1);
et2 = (EditText) this.findViewById(R.id.et_contact2);
}
//选择第一个联系人
public void click(View view) {
Intent intent = new Intent(this, ContactActivity.class);
//requestCode请求码用来区分不同的意图请求
startActivityForResult(intent, 1);
}
//选择第二个联系人
public void click2(View view) {
Intent intent = new Intent(this, ContactActivity.class);
startActivityForResult(intent, 2);
}
/**
* 当被激活的activity 使用完毕 销毁的时候 就会执行onActivityresult的方法
*/
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
System.out.println("结果码为"+ resultCode);
super.onActivityResult(requestCode, resultCode, data);
if(resultCode==2){
Toast.makeText(MainActivity.this,"暂无任何联系人", Toast.LENGTH_LONG).show();
}
else if (data != null) {
String name = data.getStringExtra("name");
//根据返回的结果中附带的之前我们传过去的请求码来区分是我们这个主activity的click还是click2请求过去的,以此来区分处理不同的业务逻辑
if (requestCode == 1) {
et.setText(name);
}else if(requestCode == 2){
et2.setText(name);
}
}
}
}
清单文件中当然还是要配置第二个activity的AndroidManifest.xml:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.getresultdata">
<uses-permission android:name="android.permission.READ_CONTACTS" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.GetResultData">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".ContactActivity"></activity>
</application>
</manifest>
第二个activity,ContactActivity.java:
package com.example.getresultdata;
import android.content.Intent;
import android.database.Cursor;
import android.graphics.Color;
import android.net.Uri;
import android.os.Bundle;
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 androidx.appcompat.app.AppCompatActivity;
import java.util.ArrayList;
import java.util.List;
public class ContactActivity extends AppCompatActivity {
ListView lv;
List<String> names;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.contact);
lv = (ListView) this.findViewById(R.id.lv);
names = getContacts();
if(names.isEmpty()){
setResult(2);
// 可以把当前(ContactActivity)的activity给结束掉
finish();
}
else{
lv.setAdapter(new MyAdapter());
//列表视图监听每个列表项的点击事件
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
TextView tv = (TextView) view;
String name = tv.getText().toString();
Intent data = new Intent();
data.putExtra("name", name);
//返回时给设置一个结果码以及要返回的数据
setResult(3, data);
finish();
}
});
}
}
//列表渲染适配器,用names来渲染
private class MyAdapter extends BaseAdapter {
@Override
public int getCount() {
return names.size();
}
@Override
public Object getItem(int position) {
return position;
}
//虚id,并非数据库中查询出来的id,不过也可以自定义
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
TextView tv = new TextView(ContactActivity.this);
tv.setTextSize(28);
tv.setTextColor(Color.RED);
tv.setText(names.get(position));
return tv;
}
}
//names类集生成
private List<String> getContacts (){
String rawbase = "content://com.android.contacts/raw_contacts";
String database = "content://com.android.contacts/data";
Cursor cursor = this.getContentResolver().query(Uri.parse(rawbase), null, null, null, null);
List<String> names = new ArrayList<String>();
while (cursor.moveToNext()) {
String id = cursor.getString( cursor.getColumnIndex("_id"));
System.out.println("id ="+ id);
Cursor datacursor = this.getContentResolver().query(Uri.parse(database), null, "raw_contact_id=?", new String[]{id}, null);
while (datacursor.moveToNext()) {
String[] feilds = datacursor.getColumnNames();
String namesToStr="";
for(int i =0;i<feilds.length;i++){
namesToStr+=feilds[i]+" ";
}
System.out.println("当前字段列表:"+namesToStr);
String type = datacursor.getString(datacursor.getColumnIndex("mimetype"));
if("vnd.android.cursor.item/name".equals(type)){
String data1 = datacursor.getString( datacursor.getColumnIndex("data1"));
System.out.println("data1:"+data1);
names.add(data1);
}
}
datacursor.close();
}
cursor.close();
return names;
}
}
第二个activity的布局文件contact.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="vertical" >
<ListView
android:id="@+id/lv"
android:layout_width="match_parent"
android:layout_height="match_parent" >
</ListView>
</LinearLayout>
关键字词:activity,android,返回,结果