[英]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
權限。
可能有兩個可能的原因。
使用Activity的引用調用你的statrtActivityForResults,比如
getActivity().startActivityForResult(intent, 1);
在你的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.