2014-02-27 67 views
4

喜在片段我要挑從通訊錄中的電話號碼,並嵌入成的EditText使用onActivityResult在片段

,但它不是在片段工作,我用它的活性和它的作品。請你能幫助我,我應該如何改變它<感謝

public class Encrypt extends Fragment { 

    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     View v = inflater.inflate(R.layout.encrypt, null); 
     phoneNumberDisplay = (EditText) v.findViewById(R.id.editTextPhoneNumber); 
     contactsButton=(Button)v.findViewById(R.id.buttonContacts); 
     contactsButton.setOnClickListener(new OnClickListener() {   
      @Override 
      public void onClick(View v) { 
       if(v==contactsButton){ 
        Intent intent=new Intent(Intent.ACTION_PICK,Contacts.CONTENT_URI); 
        intent.setType(ContactsContract.CommonDataKinds.Phone.CONTENT_TYPE); 
        startActivityForResult(intent, 1); 
       } 
      } 
     }); 

     @Override 
     protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
      if (resultCode == RESULT_OK) { 
       Uri ur = data.getData(); 
       Cursor c = managedQuery(ur, null, null, null, null); 
       if (c.moveToFirst()) { 
        String s = c.getString(c.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); 
        phoneNumberDisplay.setText(s); 
       } 
      } 
     } 
     return v; 
    } 

錯誤:RESULT_OK不能被解析爲一個變量

的方法managedQuery(URI,NULL,NULL,NULL,NULL)是不確定的鍵入新 View.OnClickListener(){}

+0

看起來好,您是否嘗試調試並檢查是否已調用onActivityResult? –

+0

@UdiOshi它不可能運行它強調onActivityResult和寫:void是一個無效類型的變量onActivityResult – rgreso

+0

@rgreso看到我的答案,它可能會解決您的問題。 – Synxis

回答

0

對於訪問聯繫人形成你的電話,請確保您添加清單文件的權限android.permission.READ_CONTACTS ..

+0

是的,我有這個permision ..它給我寫的是:void是變量的無效類型onActivityResult – rgreso

+0

試試這個,,,可以解決你的問題.. – Akshay

+0

@Override protected void onActivityResult(int requestCode,int resultCode,Intent data){if(resultCode = = RESULT_OK) \t \t \t \t return; Uri ur = data.getData();光標c = managedQuery(ur,null,null,null,null); (c.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));如果(c.moveToFirst()){c.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));如果(c.moveToFirst()){c0.moveToFirst() \t \t \t \t phoneNumberDisplay.setText(s); \t \t \t} \t \t} – Akshay

0

有可能有兩種PO這是可能的原因。

  1. 呼叫使用活動的參考你的statrtActivityForResults,像

    getActivity().startActivityForResult(intent, 1); 
    
  2. 調用super.onActivityResult(requestCode,resultCode爲,數據),你onActivityResult()作爲@marcin_j也指出。

嘗試其中之一或兩者。看看哪一個適合你。

這裏有一個link.

+0

其無法運行它,它強調onActivityResult寫:無效是一個無效的類型onActivityResult – rgreso

+0

變量你在錯誤的地方,即onActivityResult returnin您的視圖V。它應該在onCreateView方法中。 –

0

您正在試圖返回值時onActivityResult是無效的返回功能,你需要實現你的邏輯,而無需返回

2

好吧任何價值,你有沒有很好地放置一個括號。我想你想`onActivityResult在點擊監聽器。

contactsButton.setOnClickListener(new OnClickListener() {   
     @Override 
     public void onClick(View v) { 
      if(v==contactsButton){ 
       Intent intent=new Intent(Intent.ACTION_PICK,Contacts.CONTENT_URI); 
       intent.setType(ContactsContract.CommonDataKinds.Phone.CONTENT_TYPE); 
       startActivityForResult(intent, 1); 
      } 
     } 
    }); 
// ^^ 
// This parenthesis should not be here 

刪除括號和分號,並在這裏添加它們:

@Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     if (resultCode == RESULT_OK) { 
      Uri ur = data.getData(); 
      Cursor c = managedQuery(ur, null, null, null, null); 
      if (c.moveToFirst()) { 
       String s = c.getString(c.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); 
       phoneNumberDisplay.setText(s); 
      } 
     } 
    }); 
// ^^ 
// Here, so that it is in the event listener 

注意:因爲我固定在您的文章縮進我看到這個錯誤。下一次,請務必正確縮進代碼,以便您能看到那種錯誤(這也是我不喜歡K支架風格的原因)。

更新: 這是Activity.RESULT_OK,不是裸RESULT_OK

對於managedQuery:見this question。對於getContentManager:見here

+0

感謝您的回答!是的,它修復了這個錯誤,但它並沒有將選定的聯繫人插入到我的editText中,當我在另一個項目的Activity中有相同的代碼時,它會插入它 – rgreso

+0

您可以評論'if(v == contactsButton)'(及其右括號)看看是否有效? (嗯,爲什麼在Java中的UI如此遲鈍?) – Synxis

+0

對不起,我沒有提到有另一個錯誤......它不知道RESULT_OK(在它的活動它),它想要實現managedQuery(在活動它doesnt)。它只在我刪除*(resultCode == RESULT_OK)並創建未實現的managedQuery方法時才運行。對不起,我現在意識到了。我不知道如何implmenet managedQuery方法我真的是初學者,這個代碼我發現在一些教程中,並在Activity中測試。 – rgreso

0
public String getPath(Uri uri) { 
    // just some safety built in 
    if(uri == null) { 
     // TODO perform some logging or show user feedback 
     return null; 
    } 
    // try to retrieve the image from the media store first 
    // this will only work for images selected from gallery 
    String[] projection = { MediaStore.Images.Media.DATA }; 
    Activity ac =new Activity(); 
    Cursor cursor =ac.managedQuery(uri, projection, null, null, null); 
    if(cursor != null){ 
     int column_index = cursor 
       .getColumnIndexOrThrow(MediaStore.Images.Media.DATA); 
     cursor.moveToFirst(); 
     return cursor.getString(column_index); 
    } 
    // this is our fallback here 
    return uri.getPath(); 
    } 
相關問題