안녕하세요.


이거 원래 다른 분이 만든건데 제가 좀 더 수정을 했습니다.


http://www.androidpub.com/45681


원래 만드신 분 주소구요.


클릭이벤트까지는 넣어서 눌렀을 때, 전화나 문자를 보낼 수 있습니다.


그런데 문제는 초성검색후에 바뀐리스트에서 새로 position값을 읽고 전화나 문자를 해야 하는데 그걸 제가 구현을 할줄 몰라서요.


몇가지 시도는 해봤지만, 도와주세요.


일단 ArrayList에 nameList와 phoneList는 제가 임의로 해놓은거고 그 부분은 지우시고,

고쳐주세요.



package org.utopia.android.voicesms;


import java.util.ArrayList;

import java.util.List;


import android.app.AlertDialog;

import android.app.ListActivity;

import android.content.Context;

import android.content.DialogInterface;

import android.content.Intent;

import android.database.Cursor;

import android.net.Uri;

import android.os.Bundle;

import android.provider.Contacts;

import android.provider.ContactsContract;

import android.text.Editable;

import android.text.TextWatcher;

import android.util.Log;

import android.view.LayoutInflater;

import android.view.View;

import android.view.ViewGroup;

import android.widget.AdapterView;

import android.widget.AdapterView.OnItemClickListener;

import android.widget.ArrayAdapter;

import android.widget.EditText;

import android.widget.ListView;

import android.widget.TextView;

import android.widget.Toast;


public class VoicesmsActivity extends ListActivity {


private String searchKeyword;

ContactsListAdapter<Contact> adapter;

ArrayList<String> nameList = null;

ArrayList<String> phoneList = null;

private List<Contact> getContactsList() throws Exception {


List<Contact> contactsList = new ArrayList<Contact>();


/* 구버전 코드

String[] projection = new String[] { Contacts.People._ID,

Contacts.People.NAME, Contacts.People.NUMBER };


Cursor cursor = managedQuery(Contacts.People.CONTENT_URI, projection,

null, null, null);

*/

String[] projection = new String[] { ContactsContract.CommonDataKinds.Phone._ID,

   ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME, ContactsContract.CommonDataKinds.Phone.NUMBER };

   Cursor cursor = managedQuery(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, projection,

   null, null, ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME + " ASC");

   

while (cursor.moveToNext()) {

addContact(contactsList, cursor.getString(1), cursor.getString(2));

nameList.add(cursor.getString(1));

phoneList.add(cursor.getString(2));

}


return contactsList;

}


private void addContact(List<Contact> contactsList, String name,

String number) throws Exception {


if (contactsList == null) {

throw new NullPointerException("contactList가 null 입니다.");

}


boolean isAdd = false;


if (searchKeyword != null && "".equals(searchKeyword.trim()) == false) {


String iniName = HangulUtils.getHangulInitialSound(name,

searchKeyword);


if (iniName.indexOf(searchKeyword) >= 0) {

isAdd = true;

}

} else {

isAdd = true;

}


if (isAdd) {

contactsList.add(new Contact(name, number));

}

}


private void displayList() throws Exception {


List<Contact> contactsList = null;


contactsList = getContactsList();

adapter = new ContactsListAdapter<Contact>(

this, R.layout.contacts_list_row, contactsList);

setListAdapter(adapter);

}

private class ContactsListAdapter<T extends Contact> extends

ArrayAdapter<T> {


private List<T> contactsList;


public ContactsListAdapter(Context context, int textViewResourceId,

List<T> items) {

super(context, textViewResourceId, items);

contactsList = items;

}


@Override

public View getView(int position, View convertView, ViewGroup parent) {

View view = convertView;

if (view == null) {

LayoutInflater vi = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);

view = vi.inflate(R.layout.contacts_list_row, null);

}


T contacts = contactsList.get(position);

if (contacts != null) {

TextView viewName = (TextView) view.findViewById(R.id.toptext);

if (viewName != null) {

viewName.setText(contacts.getName());

}


TextView viewNumber = (TextView) view

.findViewById(R.id.bottomtext);

if (viewNumber != null) {

viewNumber.setText("전화번호 : " + contacts.getNumber());

}

}


return view;

}

}


@Override

protected void onCreate(Bundle savedInstanceState) {

setTheme(android.R.style.Theme_NoTitleBar);

super.onCreate(savedInstanceState);


setContentView(R.layout.contacts_list);


EditText searchBox = (EditText) findViewById(R.id.EditText01);


try {

searchBox.addTextChangedListener(new TextWatcher() {


public void afterTextChanged(Editable arg0) {

// ignore

}


public void beforeTextChanged(CharSequence s, int start,

int count, int after) {

// ignore

}


public void onTextChanged(CharSequence s, int start,

int before, int count) {


try {

searchKeyword = s.toString();

displayList();

} catch (Exception e) {

Log.e("", e.getMessage(), e);

}

}


});


displayList();

adapter.notifyDataSetChanged();

ListView list = getListView();

list.setAdapter(adapter);

list.setOnItemClickListener(new OnItemClickListener() {

public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

final String name = nameList.get(position);

final String phone = phoneList.get(position);

if(phone != null) {

AlertDialog dialog = new AlertDialog.Builder(VoicesmsActivity.this).setTitle(name)

.setMessage(phone)

.setCancelable(false)

.setPositiveButton("Call", new DialogInterface.OnClickListener() {

public void onClick(DialogInterface dialog, int which) {

Intent i = new Intent(Intent.ACTION_CALL, Uri.parse("tel:"+phone));

startActivity(i);

}

})

.setNeutralButton("SMS", new DialogInterface.OnClickListener() {

public void onClick(DialogInterface dialog, int which) {

String smsPhone = phone;

if(smsPhone.indexOf("+82)1") == 0)

smsPhone = smsPhone.replace("+82)1", "01");

else if(smsPhone.indexOf("+82) 1") == 0)

smsPhone = smsPhone.replace("+82) 1", "01");

Intent intent = new Intent(Intent.ACTION_SENDTO, Uri.parse("smsto:"+smsPhone));

startActivity(intent);

}

})

.setNegativeButton("취소", new DialogInterface.OnClickListener() {

public void onClick(DialogInterface dialog, int which) {

// TODO Auto-generated method stub

}

})

.show();

}

}

});

} catch (Exception e) {

Log.e("", e.getMessage(), e);

}

}

}