2013-03-14 2 views
1

은 내가 다른 방법을 사용전화에서 사용자 지정 목록보기로 연락처를 채우는 방법?

import java.util.ArrayList; 

import android.app.Activity; 
import android.database.Cursor; 
import android.os.Bundle; 
import android.provider.ContactsContract; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.AdapterView.OnItemClickListener; 
import android.widget.ListAdapter; 
import android.widget.ListView; 
import android.widget.SimpleCursorAdapter; 
import android.widget.TextView; 
import android.widget.Toast; 

public class Rabtaye extends Activity { 

    ListView msgList; 
    ArrayList<MessageDetails> details; 
    AdapterView.AdapterContextMenuInfo info; 

    Cursor cursor; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.layout_main); 

     msgList = (ListView) findViewById(R.id.MessageList); 
     details = new ArrayList<MessageDetails>(); 

     MessageDetails Detail = new MessageDetails(); 
     cursor = getContentResolver().query(
       ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, 
       null, null); 
     startManagingCursor(cursor); 

     String info[] = { ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME, 
       ContactsContract.CommonDataKinds.Phone.NUMBER, 
       ContactsContract.CommonDataKinds.Phone._ID }; 
     for(String a:info){ 
     Detail.setName(a); 
     } 
     Detail.setNumber("0313"); 
     details.add(Detail); 
//  int to[] = { R.id.name, R.id.number }; 
//  ListAdapter cursada = new SimpleCursorAdapter(this, 
//    android.R.layout.simple_expandable_list_item_2, cursor, info, 
//    to); 
     msgList.setAdapter(new CustomAdapter(details, this)); 


     msgList.setOnItemClickListener(new OnItemClickListener() { 

      @Override 
      public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, 
        long arg3) { 
       TextView s = (TextView) arg1.findViewById(R.id.name); 
       String abc = s.getText().toString(); 
       Toast.makeText(Rabtaye.this, abc, Toast.LENGTH_LONG).show(); 
      } 
     }); 
    } 
} 

.. BaseAdapter 지금 내가 이것을 시도하고 전화 book..I에서이 담당자 이름과 목록보기 및 번호를 채우려 사용하여 사용자 지정 목록보기 만들었지 만은 할 수 없습니다입니다 ListView에 연락처 이름 또는 번호를 채 웁니다. 이 코드에서는 정적으로 이름과 번호를 추가해야합니다 ... 나는 여기에서 매우 혼란 스럽습니다. 약간의 도움이 크게 감사 할 것입니다. 미리 감사드립니다. 나는 초보자이다. 나에게 쉽게 가라. ..

답변

1

흠. 너는 바른 길을 가고있다. 그러나 나는 너가 조금 방황하고 있다고 생각한다.

ListView는 BaseAdapter가 아닌보기 개체입니다. 늘어나는만큼 당신의 코드에서 알 수있는, 당신은 귀하의 ListView에 대한 사용자 지정 어댑터가 필요하지 않습니다.

정규식 CursorAdapter를 ListView에 바인딩하고 CursorLoader를 사용하여 연락처 공급자에서 원하는 연락처 데이터를로드 한 다음 결과 커서를 CursorAdapter로 이동해야합니다.

이 Android 교육 강의에서는 지침 : Loading Data in the Background을 참조하십시오.

사용자 지정 ListView에서 ListView 자체에서 가져올 수없는 항목을 원하십니까?

+0

문제는, 나는 모든 연락처로 전체 listview를 채우고 그 (것)들을 가진 체크 박스가 있고 싶다. 나는 기본 ListView를 시도했지만 숫자를 보여주지 않는다. 그래서 맞춤 목록보기로 전환했습니다. –

1

만일 당신이 ListView에 당신이 가지고있는 아이템의 단일 목록 이상을 가지고 있으면 (당신이 이름, 번호 등을하고있는 것처럼 보인다) 사용자 지정 어댑터를 만들 수 있습니다. 귀하의 활동이나 새로운 수업에서 BaseAdapter 수업을 연장하십시오. 그런 다음 getView() 메소드를 재정의해야합니다. 이것은 새 항목이 부풀려 질 때마다 호출되는 것입니다.

작성시 ArrayListBaseAdapter으로 전달합니다. 어댑터의 getView() 메서드는 논리를 코딩하여 데이터를 가져와 목록 항목으로 제시하는 곳입니다. TextViews을 포함하는 각 목록 항목의 레이아웃으로 새 XML 파일을 정의해야하며 각 목록 항목에있는 다른 하위 항목의 선택 항목이 데이터로 채워집니다.

"baseadapter"를 검색하면 여러 가지 예가 있습니다. 여기에 꽤 좋은 소개를주는 one가 있습니다.

관련 문제