簡體   English   中英

在Fragments中使用onActivityResult

[英]using onActivityResult in Fragments

嗨片段中我想從聯系人中選擇一個電話號碼並將其插入EditText

但它不在片段中工作我在活動中使用它並且它有效。 請問你能幫我改變它嗎<謝謝

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)未定義類型new View.OnClickListener(){}

好的,你的括號不合適。 我想你希望`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&R大括號風格的原因)。

更新 :它是Activity.RESULT_OK ,而不是原始RESULT_OK

對於managedQuery :請參閱此問題

對於getContentManager :請參見此處

要從手機訪問聯系人,請確保在清單文件中添加了android.permission.READ_CONTACTS權限。

可能有兩個可能的原因。

  1. 使用Activity的引用調用你的statrtActivityForResults,比如

     getActivity().startActivityForResult(intent, 1); 
  2. 在你的onActivityResult()中調用super.onActivityResult(requestCode,resultCode,data)同樣指向@marcin_j。

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

這是一個鏈接。

當onActivityResult為void返回函數時,您試圖返回值,您需要實現您的邏輯而不返回任何值

  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();
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM