java - 在 fragment 中使用 onActivityResult

标签 java android onactivityresult

你好,在 fragment 中,我想从联系人中选择一个电话号码并将其插入到 EditText 中

但它在 fragment 中不起作用我在 Activity 中使用它并且它有效。请问你能帮我改一下吗<谢谢

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

最佳答案

好吧,你有一个放置不当的括号。我想您希望 `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:参见 this question .

对于 getContentManager:参见 here .

关于java - 在 fragment 中使用 onActivityResult,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22067696/

相关文章:

java - 将 UDP 与 NIO 一起使用有什么意义?

Java 等效于以下静态只读 C# 代码?

java - org.hibernate.propertyvalueexception not-null 属性引用 null

android - app-debug.apk 在我的 Android 设备上手动安装时崩溃

java - startActivityForResult 到一个类并让该类将数据返回到另一个类?

android - onActivityResult 执行两次

java - 如何用JSP开发网站?

android - 想从 android 中的 Assets 文件夹中播放 mp4 视频

java - 如何在结束来电android时发出通知

java - 为什么 onActivityResult() 不起作用?