У меня есть стандартный TabHost с вкладкой, содержащей Spinner. Я пытаюсь заполнить выбор счетчика контактной информацией. Кажется, все работает, за исключением того, что когда наступает этап обновления содержимого счетчика, этого не происходит, поэтому счетчик остается пустым все время. Я думаю, что мне нужна помощь, чтобы правильно захватить рукоятку адаптера Spinner таким образом, чтобы добавление происходило. Вот мой код:
public class Page2Activity extends Activity
implements OnClickListener, OnLongClickListener {
private RadioButton rb1;
private RadioButton rb2;
private RadioButton rb3;
private RadioButton rb4;
private TextView t1;
private Spinner s1;
private ArrayAdapter<CharSequence> m_adapterForSpinner;
private static final int CONTACT_PICKER_RESULT = 1001;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.tabpage2);
rb1 = (RadioButton) this.findViewById(R.id.DE);
rb2 = (RadioButton) this.findViewById(R.id.DL);
rb3 = (RadioButton) this.findViewById(R.id.DLL);
rb4 = (RadioButton) this.findViewById(R.id.DI);
t1 = (TextView) this.findViewById(R.id.textView1);
s1 = (Spinner) this.findViewById(R.id.spinner1);
m_adapterForSpinner = new ArrayAdapter(this, android.R.layout.simple_spinner_item);
m_adapterForSpinner.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
s1.setAdapter(m_adapterForSpinner);
s1.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
String selection = s1.getSelectedItem().toString();
String[] number = selection.split(" -> ");
number[1] = number[1].replace("-", "");
t1.setText(number[1]);
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
// TODO Auto-generated method stub
}
});
}
Приведенный выше код настраивает обработчик выбора счетчика и счетчика, который работает нормально, когда я вручную заполняю содержимое счетчика в коде. Тем не менее, я пытаюсь перечислить контактную информацию из средства выбора контактов в качестве элементов в счетчике программным способом. Вот обработчик для сборщика. Кажется, что все здесь работает, чтобы найти интересующие элементы контакта на основе проверки посредством регистрации, но по какой-то причине он фактически не обновляет варианты в Spinner на вкладке. Я думаю, что именно мое использование m_adapterForSpinner ниже вызывает проблему, но я не уверен насчет этого или как ее исправить. Совет?
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == RESULT_OK) {
switch (requestCode) {
case CONTACT_PICKER_RESULT:
Uri result = data.getData();
Log.v("D", "Got a result: " + result.toString());
Uri myURI = Uri.parse(result.toString()) ;
ContentResolver cr = getContentResolver();
Cursor cur = cr.query(myURI, null, null, null, null);
if (cur.getCount() > 0) {
while (cur.moveToNext()) {
String id = cur.getString(
cur.getColumnIndex(ContactsContract.Contacts._ID));
String name = cur.getString(
cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
Toast.makeText(this, name, 500).show();
if (Integer.parseInt(cur.getString(cur.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) {
//Query phone here. Covered next
if (Integer.parseInt(cur.getString(
cur.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) {
Cursor pCur = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = ?", new String[]{id}, null);
final int contactNumberColumnIndex = pCur.getColumnIndex(Phone.NUMBER);
final int contactTypeColumnIndex = pCur.getColumnIndex(Phone.TYPE);
while (pCur.moveToNext()) {
// Do something with phones
String typename = null;
final String number = pCur.getString(contactNumberColumnIndex);
final int type = pCur.getInt(contactTypeColumnIndex);
switch (type) {
case Phone.TYPE_ASSISTANT:
typename= "Assistant";
break;
case Phone.TYPE_CALLBACK:
typename = "Callback";
break;
break;
default:
typename = "Undefined";
break;
}
// Добавить элемент в варианты в Spinner в обратном вызове OnActivityResult
m_adapterForSpinner.add(typename + " -> " + number);
}
pCur.close();
}}}}
break;
}}
else {
// gracefully handle failure
Toast.makeText(this, "Contact Selection Failed", 5000);
}
}