これが機能するかどうかさえわかりませんが、これが私たちが学ぶ方法なので、これがまだ壊れているとは言わないでください:)
私は最初のカーソルローダーを試しています。onCreateLoader メソッドを正しくセットアップしたと思いますが、onLoadFinished メソッドと onLoadReset メソッドをセットアップする方法がわかりません。スイッチとケースを扱うのはこれが初めてです。これらの2つの方法を記入する助けがあれば大歓迎です.
このクラスは、選択した連絡先 ID の連絡先電話番号と連絡先電子メールを取得します。興味深いのは、そのままのコードが連絡先の電子メール アドレスを取得し、それを電話番号のテキストとして設定していることです。
import android.app.Activity;
import android.app.LoaderManager.LoaderCallbacks;
import android.content.CursorLoader;
import android.content.Loader;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.widget.TextView;
/**
* Created by Pete on 6/19/13.
*/
public class ContactDetails extends Activity implements LoaderCallbacks<Cursor> {
TextView tvContactName, tvPhoneNum, tvPhoneType, tvPhoneFull,
tvEmailAdd, tvEmailType, tvEmailFull,
tvAddress, tvAddType, tvAddFull;
String contactId, contactName, phoneType, phoneFull, phoneNum1,
emailAdd, emailType, emailFull,
address, addType, addFull;
private static final int LOADER_PHONE = 2;
private static final int LOADER_EMAIL = 3;
//Contact List query arguments
Uri uri;
String[] projection, selectionArgs;
String selection, sortOrder;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.contactinfo);
initialize();
contactId = getIntent().getStringExtra("contactId");
contactName = getIntent().getStringExtra("contactName");
tvContactName.setText(contactName);
getLoaderManager().initLoader(LOADER_PHONE, null, this);
getLoaderManager().initLoader(LOADER_EMAIL, null, this);
}
public void initialize() {
tvContactName = (TextView)findViewById(R.id.tvContactName);
tvPhoneNum = (TextView)findViewById(R.id.tvPhoneNum);
tvPhoneType = (TextView)findViewById(R.id.tvPhoneType);
tvPhoneFull = (TextView)findViewById(R.id.tvPhoneFull);
tvEmailAdd = (TextView)findViewById(R.id.tvEmailAdd);
tvEmailType = (TextView)findViewById(R.id.tvEmailType);
tvEmailFull = (TextView)findViewById(R.id.tvEmailFull);
tvAddress = (TextView)findViewById(R.id.tvAddress);
tvAddType = (TextView)findViewById(R.id.tvAddType);
tvAddFull = (TextView)findViewById(R.id.tvAddFull);
}
@Override
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
switch (id) {
case LOADER_PHONE:
uri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI;
projection = new String[] {
ContactsContract.CommonDataKinds.Phone.NUMBER
};
selection = ContactsContract.CommonDataKinds.Phone.CONTACT_ID +
" = " + contactId;
selectionArgs = null;
sortOrder = null;
break;
case LOADER_EMAIL:
uri = ContactsContract.CommonDataKinds.Email.CONTENT_URI;
projection = new String[] {
ContactsContract.CommonDataKinds.Email.ADDRESS
};
selection = ContactsContract.CommonDataKinds.Email.CONTACT_ID +
" = " + contactId;
selectionArgs = null;
sortOrder = null;
break;
}
return new CursorLoader(this, uri, projection, selection, selectionArgs, sortOrder);
}
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) {
if (cursor != null && cursor.getCount() > 0) {
while (cursor.moveToNext()) {
// Extract the phone number
phoneFull = cursor.getString(
cursor.getColumnIndex(
ContactsContract.CommonDataKinds.Phone.NUMBER));
tvPhoneFull.setText(phoneFull);
}
}
}
@Override
public void onLoaderReset(Loader<Cursor> arg0) {
// TODO Auto-generated method stub
}
}
電子メール情報を設定するための現在コメントアウトされている while ループは次のとおりです。
uri = ContactsContract.CommonDataKinds.Email.CONTENT_URI;
projection = new String[] {
ContactsContract.CommonDataKinds.Email.ADDRESS
};
selection = ContactsContract.CommonDataKinds.Email.CONTACT_ID +
" = " + contactId;
selectionArgs = null;
sortOrder = null;
Cursor emailCursor = getContentResolver().query(
uri, projection, selection, selectionArgs, sortOrder);
while (emailCursor.moveToNext()) {
// Extract email address
emailFull = emailCursor.getString(
emailCursor.getColumnIndex(
ContactsContract.CommonDataKinds.Email.ADDRESS));
tvEmailFull.setText(emailFull);
}
emailCursor.close();