[android] 開啟新的activity獲取他的返回值


應用場景:打開一個新的activity,在這個activity上獲取數據,返回給打開它的界面

短信發送時,可以直接選擇系統聯系人

 

界面布局是一個線性布局,里面右側選擇聯系人在EditText的右上,因此使用相對布局對輸入框進行包裹,按鈕使用android:layout_alignParentRight=”true”處理

下面的內容有多行,使用 屬性android:inputType=”textMultiLine” 屬性android:minLines=”5”

我們使用hvg的屏幕進行預覽

 

打開一個新的界面展示系統聯系人,采用ListView控件實現列表,繼承BaseAdapter來實現適配器,通過ContentProvider讀取系統的聯系人。

 

MainActivity(主界面)

 

package com.tsh.gaojisms;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.EditText;

public class MainActivity extends Activity {
    private EditText et_number;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        et_number=(EditText) findViewById(R.id.et_number);
    }
    /**
     * 選擇聯系人
     * @param v
     */
    public void selectContacts(View v){
        Intent intent=new Intent(this,SelectContactActivity.class);
        startActivityForResult(intent, 0);
    }
    /**
     * 接受返回的結果
     */
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        String number=data.getStringExtra("number");
        et_number.setText(number);
    }
}

 

SelectContactActivity(聯系人界面)

package com.tsh.gaojisms;

import java.util.List;

import com.tsh.gaojisms.domain.ContactInfo;
import com.tsh.gaojisms.service.ContactInfosService;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView;

public class SelectContactActivity extends Activity {
    private ListView lv_contacts;
    public List<ContactInfo> contactInfos;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_select_contact);
        lv_contacts=(ListView) findViewById(R.id.lv_contacts);
        //獲取數據
        contactInfos=ContactInfosService.getContactInfos(this);
        lv_contacts.setAdapter(new MyAdapter());
        //設置點擊
        lv_contacts.setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) {
                ContactInfo info=contactInfos.get(position);
                String number=info.getNumber();
                Intent intent=new Intent();
                intent.putExtra("number", number);
                setResult(0,intent);
                finish();
            }
        });
    }
    /*
     * 適配器
     */
    private class MyAdapter extends BaseAdapter {

        @Override
        public int getCount() {
            // TODO Auto-generated method stub
            return contactInfos.size();
        }

        @Override
        public Object getItem(int position) {
            // TODO Auto-generated method stub
            return null;
        }

        @Override
        public long getItemId(int position) {
            // TODO Auto-generated method stub
            return 0;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            View view=View.inflate(SelectContactActivity.this, R.layout.contact_item, null);
            TextView tv_name=(TextView) view.findViewById(R.id.tv_name);
            TextView tv_number=(TextView) view.findViewById(R.id.tv_number);
            String name=contactInfos.get(position).getName();
            String number=contactInfos.get(position).getNumber();
            tv_name.setText(name);
            tv_number.setText(number);
            return view;
        }}
}

 

 

ContactInfoService(獲取聯系人信息Service

package com.tsh.gaojisms.service;

import java.util.ArrayList;
import java.util.List;

import android.content.ContentResolver;
import android.content.Context;
import android.database.Cursor;
import android.net.Uri;

import com.tsh.gaojisms.domain.ContactInfo;

public class ContactInfosService {
    public static List<ContactInfo> getContactInfos(Context context) {
        List<ContactInfo> contactInfos = new ArrayList<ContactInfo>();
        ContentResolver resolver = context.getContentResolver();
        Uri uri = Uri.parse("content://com.android.contacts/raw_contacts");
        Uri dataUri = Uri.parse("content://com.android.contacts/data");
        // 循環聯系人表
        Cursor cursor = resolver.query(uri, null, null, null, null);
        while (cursor.moveToNext()) {
            String id = cursor.getString(cursor.getColumnIndex("contact_id"));
            if (id != null) {
                // 查找數據表
                Cursor dataCursor = resolver.query(dataUri, null,
                        "raw_contact_id=?", new String[] { id }, null);
                ContactInfo info = new ContactInfo();
                while (dataCursor.moveToNext()) {
                    String data1 = dataCursor.getString(dataCursor
                            .getColumnIndex("data1"));
                    String mimetype = dataCursor.getString(dataCursor
                            .getColumnIndex("mimetype"));
                    if (mimetype.equals("vnd.android.cursor.item/name")) {
                        info.setName(data1);
                    } else if (mimetype
                            .equals("vnd.android.cursor.item/phone_v2")) {
                        info.setNumber(data1);
                    }
                }
                contactInfos.add(info);
            }

        }
        return contactInfos;
    }
}

 

 

ContactInfo(聯系人信息bean

package com.tsh.gaojisms.domain;
/**
 * 聯系人業務bean
 * @author taoshihan
 *
 */
public class ContactInfo {
    private String name;
    private String number;
    public ContactInfo() {
    }
    public ContactInfo(String name, String number) {
        super();
        this.name = name;
        this.number = number;
    }
    @Override
    public String toString() {
        return "ContactInfo [name=" + name + ", number=" + number + "]";
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getNumber() {
        return number;
    }
    public void setNumber(String number) {
        this.number = number;
    }
}

 

 

activity_main.xml(主布局界面)

<LinearLayout 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"
    android:orientation="vertical"
    tools:context="${relativePackage}.${activityClass}" >

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >

        <EditText
            android:id="@+id/et_number"
            android:layout_marginTop="17dp"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="請輸入號碼" />

        <Button
            android:onClick="selectContacts"
            android:layout_alignParentRight="true"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="選擇" />
    </RelativeLayout>
    <EditText 
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="短信內容"
        android:inputType="textMultiLine"
        android:minLines="5"/>
    <Button 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="發送"/>

</LinearLayout>

 

 

activity_select_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_contacts"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >
    </ListView>

</LinearLayout>

 

 

contact_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="vertical" >
    <TextView 
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/tv_name"
        android:text="用戶名"
        android:textSize="18sp"
        android:textColor="#ff0000"/>
    <TextView 
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/tv_number"
        android:text="電話號碼"
        android:textSize="12sp"
        android:textColor="#80000000"/>
</LinearLayout>

 

 

這里開啟activity需要用到一個新的apistartActivityForResult(intent,requestCode),開啟一個新的activity並且獲取這個activity執行完畢后返回的結果,參數:Intent對象,int類型請求碼,此時用不到給個0

當新開啟的activity關閉的時候,會調用onActivityResult()方法。傳遞過來的參數里面有個Intent對象,通過這個Intent對象獲取到數據,展示到界面上

 

 

ListView條目設置點擊事件,調用ListView對象的setOnItemClickListener(listener)方法,參數:OnitemClickListener對象,它是一個接口類型,直接new這個接口,實現以下onItemClick(parent,view,id)方法,如果不知道函數的參數,我們可以采用斷點調試的方法,查看一下參數代表的是什么值,調用ContactInfos對象的get(position)方法,得到ConatctInfo對象,調用ContactInfo對象的getNumber()方法,得到電話號碼

 

傳遞數據給調用它的activity,調用setResult(requestCode,data)方法,參數:請求碼,Intent對象,點擊完成之后調用Activity對象的finish()方法

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM