2016-06-22 4 views
1

죄송합니다. 어리석은 질문인데, 기본적으로 어떤 이유로이 작업을 수행하는 방법을 알아 내려고 노력하고 있습니다.CursorAdapter를 사용하여 동적으로 목록에 항목을 추가하는 방법?

ContentProvider을 사용하여 SQL 데이터베이스에서 채워지는 연락처 (두 개의 매개 변수, 이름 및 전화 번호)가있는 ArrayList가 있습니다. ArrayList는 CursorAdapter을 사용하여 채워진 다음 UI에 표시됩니다. 사용자가 연락처 목록에 항목을 동적으로 추가 할 수 있기를 바랍니다.

CursorAdapter에서 두 개의 목록 항목 유형은 bindView()newView()에 정의됩니다. 첫 번째 유형은 이름과 전화 번호에 대한 두 개의 EditText로 구성됩니다. 두 번째 유형은 이름과 전화 번호에 대한 두 개의 TextView로 구성됩니다.

  1. 사용자는 "연락처 추가하기"와 형 글고의 새 목록 항목이 동적 목록에 추가됩니다라는 버튼을 누르면 :

    기본적으로,이 나는 일이 원하는 것입니다.

  2. 사용자가 연락처 정보를 입력 한 다음 "연락처 저장"이라는 버튼을 누릅니다. 이 버튼을 누르면 EditText 유형의 목록 항목이 TextView 유형의 목록 항목으로 변환되고 ArrayList에 추가되고 다른 연락처와 함께 표시됩니다.

나는이의 라인을 따라 적어도 두 번째 문제의 일부, 무언가를하는 방법을 알고 확신 :

contactsName = nameEditText.getText().toString(); 
contactsNumber = numberEditText.getText().toString(); 
contacts.add(new ContactsObject(contactsName, contactsNumber)); 
contactsAdapter.notifyDataSetChanged(); 

그러나 나는에 문제가있는 무슨 최초의 일이다. 두 가지 다른보기 유형간에 어떻게 변환합니까? 특정 유형 (EditText)의 목록 항목을 작성한 다음 다른 유형 (TextView)으로 변환하도록 어댑터에 지시하려면 어떻게합니까?

답변

0

CursorLoader를 사용해야하는 새 데이터가 삽입되거나 제거되거나 업데이트 된 데이터베이스가 업데이트되면 CursorAdapter 하위 클래스 개체에서 swapCursor (Cursor cursor) 메서드를 호출하십시오. 물론 어댑터가 null이 아닌지 확인합니다.

어댑터에서 사용하는 커서 개체를 대체하고 설정 변경을 알리고 모든보기를 다시 그립니다.

+0

안녕하세요, 저는 여전히이 전체 Cursor에 대해 혼란 스럽습니다. a) CursorLoader가 삽입이 아닌 기존 데이터베이스를 쿼리하는 데 사용됩니까? CursorLoader 메서드를 찾고 있는데 그 중 아무 것도 삽입에 관한 것 같지 않습니다. b) 목록 항목이 EditText 또는 TextView 유형이어야하는지 여부를 처음에 어떻게 지정합니까? c) 그래서 swapCursor를 사용할 때 이전 Cursor를 EditText 데이터 유형으로 스왑하고 데이터 형식 TextView를 사용하여 새 Cursor로 교체해야합니까? 또한 swapCursor가 이전 커서를 반환하는 이유는 무엇입니까? –

관련 문제