2012-03-13 55 views
0

我有一個標準的TabHost,包含一個微調選項卡。我正在嘗試使用聯繫信息填充微調器選項。似乎一切似乎都在起作用,只是當更新微調器的內容時​​,它不會發生,所以微調器始終保持空白。我想我需要幫助,以允許添加發生的方式正確抓取Spinner適配器的句柄。這裏是我的代碼:Android - 動態微調選項卡 - 添加項目失敗

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 

     } 
     }); 

} 

上面的代碼設置的微調和微調選擇處理程序,這似乎很好地工作,當我手動填充在代碼中微調的內容。但是,我試圖以編程方式將聯繫人選擇器中的聯繫人信息列爲微調器中的項目。這是Picker的處理程序。這裏的一切似乎都在努力通過日誌記錄查找基於驗證的感興趣的聯繫人項目,但由於某種原因,它實際上並未在選項卡上更新微調器中的選項。我認爲這是我使用下面的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; 
           } 

//將項添加到選擇的微調在OnActivityResult回調

m_adapterForSpinner.add(typename + " -> " + number); 
          } 
        pCur.close(); 
       }}}} 
      break; 
     }} 
    else { 
     // gracefully handle failure 
     Toast.makeText(this, "Contact Selection Failed", 5000); 
    } 
} 
+0

您是否收到任何異常或錯誤?如果是,那麼請在這裏發佈...... – Scorpion 2012-03-13 05:52:49

+0

我建議你去用一個更簡單的方法...首先聲明一個全局(類級別變量)數組或ArrayList,無論你喜歡然後初始化微調oncreate與(使用arrayadapter當然)之後,當您完成檢索您想要放入微調器的數據時,將其放入數組列表或您聲明的數組中,然後更新微調器。注意:無論何時更改,都必須調用notifydatasetchanged()方法數據集或微調器的內容(適配器是特定的),然後再實際更新它。希望這有助於:) – Nav 2012-03-13 06:01:16

回答

0

呼叫m_adapterForSpinner.notifyDataSetChanged()來更新UI。

或致電setNotifyOnChange(boolean notifyOnChange)這會自動更新用戶界面。所以你不應該明確地打電話給m_adapterForSpinner.notifyDataSetChanged()

+0

有時notifyDataSetChanged不起作用,所以你可以使用yourAdapter.setNotifyOnChange(true);它會起作用。 =) – 2014-09-29 16:41:25