안녕하세요

너무 어렵네요

 

ListView에 전화번호 목록을 불러왔습니다.

 

목록은 chickbox의 형태 인데요

 

여러게 체크 해서 버튼 누르면 저장하고 싶은데요

 

도무지 어떻게 해야 할지 모르겠습니다.

 

버튼 클릭 이벤트에서

 

ListView에서 체크 되어 있는 목록만 읽어 오는 방법좀 알려주세요 ㅠㅠ

 

부탁드리겠습니다.

 

제가 작성한 소스코드 올리겠습니다.

 

package kr.co.JTeckDecibel;

 

import java.util.ArrayList;

 

import android.app.Activity;

import android.app.ListActivity;

import android.content.Intent;

import android.database.Cursor;

import android.net.Uri;

import android.os.Bundle;

import android.provider.ContactsContract;

import android.view.Menu;

import android.view.MenuItem;

import android.view.View;

import android.widget.AdapterView;

import android.widget.AdapterView.OnItemClickListener;

import android.widget.AdapterView.OnItemSelectedListener;

import android.widget.Button;

import android.widget.ListAdapter;

import android.widget.ListView;

import android.widget.SimpleCursorAdapter;

import android.widget.TextView;

import android.widget.Toast;

 

public class Phone_Address_Access extends Activity implements OnItemClickListener{

 

 TextView selection;

 private int mIdColumnIndex;//

 private int mHasPhoneColumnIndex;//

 private Cursor m_cPhoneCursor;

/** 주소록 정보를 가지고 있는 커서 얻기 */

 private Cursor getCursor(){

 //주소록이 저장된 URI

      Uri cContactsUri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI;

      String[] strProjection = {

      ContactsContract.Contacts._ID,

      ContactsContract.Contacts.DISPLAY_NAME,

      ContactsContract.Contacts.HAS_PHONE_NUMBER,

      ContactsContract.Contacts.LOOKUP_KEY

      };

      //주소록을 얻기 위한 쿼리문을 날리고 커서를 리턴

      return getContentResolver().query(cContactsUri, null, null, null, strProjection[0]);

 }

@Override

protected void onDestroy() {

 // TODO Auto-generated method stub

 // m_cPhoneCursor.close();

 super.onDestroy();

}

@Override

protected void onCreate(Bundle savedInstanceState) {

// TODO Auto-generated method stub

   super.onCreate(savedInstanceState);

   setContentView(R.layout.phone_address_access);

   ListView contactsListView = (ListView) findViewById(R.id.phane_address_LV);

   contactsListView.setOnItemClickListener(this);

   m_cPhoneCursor = getCursor();

   mIdColumnIndex = m_cPhoneCursor.getColumnIndex(ContactsContract.Contacts._ID);//

   mHasPhoneColumnIndex = m_cPhoneCursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER);//

//체크 된거 확인하기 위해 두 개의 값을 읽어보니 -1이 계속 나옵니다. ㅠㅠ

 

 

   Toast.makeText(Phone_Address_Access.this, "mIdColumnIndex : " +String.valueOf(mHasPhoneColumnIndex),    Toast.LENGTH_SHORT).show();

   Toast.makeText(Phone_Address_Access.this, "mHasPhoneColumnIndex : "+String.valueOf(mHasPhoneColumnIndex), Toast.LENGTH_SHORT).show();

   ListAdapter sPhoneAdapter = getAdapter();

 

   contactsListView.setAdapter(sPhoneAdapter);

   contactsListView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);////////////// milti 로 설정할 것

   findViewById(R.id.phone_addr_save_btn).setOnClickListener(mClickListener);

   findViewById(R.id.phone_addr_cancel_btn).setOnClickListener(mClickListener);

}

 

private ListAdapter getAdapter() {

// TODO Auto-generated method stub

   int iLayoutID = android.R.layout.simple_list_item_multiple_choice ;/////////////// milti 로 설정할것

   int[] iTextViewID = new int[] { android.R.id.text1, android.R.id.text2};

   String[] strProjection = {

        ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,

        ContactsContract.CommonDataKinds.Phone.DATA1

    };

   Toast.makeText(Phone_Address_Access.this, "strProjection[0]: "+strProjection[0].toString(), Toast.LENGTH_SHORT).show();

   Toast.makeText(Phone_Address_Access.this, "iTextViewID: "+ String.valueOf(iTextViewID[0]), Toast.LENGTH_SHORT).show();

   return new SimpleCursorAdapter(this, iLayoutID, m_cPhoneCursor,strProjection, iTextViewID);

}

Button.OnClickListener mClickListener = new View.OnClickListener() {

 

public void onClick(View v) {

// TODO Auto-generated method stub

   switch(v.getId()){

       case R.id.phone_addr_save_btn :

      //여기에서 선택된 값만 읽어 오고 싶은데 어떻게 작성해야 할까요?

               break;

       case R.id.phone_addr_cancel_btn :

               break;

   }

 }

};

public boolean onCreateOptionsMenu(Menu menu_JTECK){

menu_JTECK.add("나가기");

return super.onCreateOptionsMenu(menu_JTECK);

}

public boolean onOptionsItemSelected(MenuItem item_JTECK) {

switch (item_JTECK.getItemId()) {

case 0:

Intent intent_2007211053 = new Intent(Phone_Address_Access.this,

Start_Main.class);

startActivity(intent_2007211053);

android.os.Process.killProcess(android.os.Process.myPid());

Toast.makeText(getApplicationContext(), "메인으로 돌아갑니다",

Toast.LENGTH_SHORT).show();

break;

}

return super.onOptionsItemSelected(item_JTECK);

}

 

 

 

public void onNothingSelected(AdapterView<?> arg0) {

// TODO Auto-generated method stub

}

 

이 함수는 ListView의 item을 선택시 선택 된 값이 먼지 확인 해볼려고 작성 했습니다

만약 이 메소드를 이용해야 하는지 궁금하기도 합니다.

 

그러나 mIdColumnIndex, mHasPhoneColumnIndex 값이 onCreate함수에서 -1로 반환되어 값을 폰번호나 이름을 뛰우지 못하고 있습니다.

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

// TODO Auto-generated method stub

if(position >= 0)

{

     final Cursor c = (Cursor) parent.getItemAtPosition(position);

     try{

         if(c.getInt(mHasPhoneColumnIndex)> 0){

               final long contactid = c.getLong(mIdColumnIndex);

               final Cursor phones = getContentResolver().query(

                         ContactsContract.CommonDataKinds.Phone.CONTENT_URI,

                         new String[]{ ContactsContract.CommonDataKinds.Phone.NUMBER},

                         ContactsContract.CommonDataKinds.Phone.CONTACT_ID+"="+ contactid, null,

                         ContactsContract.CommonDataKinds.Phone.IS_SUPER_PRIMARY);

               try{

                    phones.moveToFirst();

                    Toast.makeText(Phone_Address_Access.this, "TEST", Toast.LENGTH_SHORT).show();

         }

         finally{

              phones.close();

         }

     }

     }catch (Exception e) {

           Toast.makeText(Phone_Address_Access.this, String.valueOf(mHasPhoneColumnIndex), Toast.LENGTH_SHORT).show();

     }

 }

}

 

}

 

가장 문제점은 button click 시 ListView의 선택 된 값을 읽어 오는 방법을 꼭 좀 알고 싶습니다.

부탁드리겠습니다. ㅜㅜ 이제 일주일도 남지 않았네요 흑흑 nn