Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 未通过自定义适配器在片段对话框中调用onActivityResult_Android_Android Fragments_Onactivityresult - Fatal编程技术网

Android 未通过自定义适配器在片段对话框中调用onActivityResult

Android 未通过自定义适配器在片段对话框中调用onActivityResult,android,android-fragments,onactivityresult,Android,Android Fragments,Onactivityresult,对安卓来说,这是相当新的。我有以下场景: 应用程序在主活动中启动,我在这里添加了一个片段 在这个片段是一个用自定义适配器填充的listview中,我正在将FragmentActivity的一个实例传递给适配器。 电话: 实施: public ExpandableListAdapter(Context context, FragmentActivity activity, List<String> listDataHeader, HashMap<String, List<

对安卓来说,这是相当新的。我有以下场景:

  • 应用程序在主活动中启动,我在这里添加了一个片段
  • 在这个片段是一个用自定义适配器填充的listview中,我正在将
    FragmentActivity
    的一个实例传递给适配器。 电话:

  • 实施:

     public ExpandableListAdapter(Context context, FragmentActivity activity, List<String> listDataHeader, HashMap<String, List<String>> listChildData) {
            this._context = context;
            this._activity = activity;
            this._listDataHeader = listDataHeader;
            this._listDataChild = listChildData;
        }
    
  • 然后,当您聚焦选择联系人打开的3个字段中的任何一个时,我使用传递的FragmentActivity调用startActivityForResult,如下所示:

    private class ContactListener extends Activity implements View.OnFocusChangeListener
    {
        @Override
        public void onFocusChange(View v, boolean hasFocus) {
            if (hasFocus) {
                Intent intent = new Intent(Intent.ACTION_PICK, Contacts.CONTENT_URI);
                _activity.startActivityForResult(intent, CONTACTS_RESULT);
            }
        }
    
        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            super.onActivityResult(requestCode, resultCode, data);
    
            if (requestCode == CONTACTS_RESULT && resultCode == RESULT_OK) {
                String cell = "?", firstName = "?", lastName = "?";
    
                uriContact = data.getData();
    
                Cursor cursor = null;
    
                mCell.setText(cell);
                mLastName.setText(lastName);
                mFirstName.setText(firstName);
            }
        }
    }
    
  • 到目前为止,一切正常。所以我现在的问题是,我想在用户选择联系人时得到结果。我在下面进行了尝试,但从未调用
    onActivityResult
    override方法。我不知道该怎么办,似乎其他人和我有不同的想法,他们的解决方案对我不起作用


    有人知道我能做什么吗?

    你需要调用这个来调用你的
    onActivityResult
    。关闭时,在对话框中输入此代码

       Intent returnIntent = new Intent();
        returnIntent.putExtra("result",result);
        setResult(Activity.RESULT_OK,returnIntent);
        finish();
    

    我建议为此使用一个接口。例如,创建必须在活动中实现的接口
    ContactCallback
    。创建适配器时,传递
    (表示接口)。当您单击适配器内的项调用时,将传递回调,如
    callback.onContactSelected()
    。在活动中实现的
    onContactSelected()
    中,您可以打开对话框

    更新:

    对于从未调用您的
    onActivityResult()
    的问题:

    清单中是否有一行名为“
    ”的android:launchMode=“singleTask”
    ?请将其删除,然后应调用该行。以下情况可能会导致接收结果时出现问题:

    • 检查您是否正确使用了
      startActivityForResult()
      ,不要使用
      startActivity()

    • 如果在重写的
      onBackPressed
      方法中执行某些操作,
      super.onBackPressed();
      必须位于方法的最后一行,而不是第一行

    • 删除清单或等效参数中的android:launchMode=“singleInstance”,以创建意图

    • 删除被调用活动清单中的
      noHistory=“true”

    • 缺少检查
      setResult()

    • 调用
      finish()
      关闭活动。使用
      finishActivity()
      关闭调用的活动

    • 请使用大于零的requestCode。负值无效


    您可以使用界面来实现这一点。请给我一个例子好吗?当用户选择联系人时,您可以在主活动中调用一个方法,并将所选联系人信息作为参数传递,如下所示:((主活动)上下文)。onContactSelection(联系人);并像在OnActivity中一样在其中做任何你想做的事情。谷歌搜索结果that@UsmanRana,我从何处调用该方法?将结果ok值放入intent中对ActivityResult排序不是一个好主意。我通过在
    MainActivity
    中实现
    onactivityresult
    来获得结果现在最重要的问题是用联系人详细信息更新对话框字段(单元格、显示名称)。感谢您的帮助。我将SelectContactDialog从dialog更改为activity,我从未如此高兴过!我是新手,所以我正在学习正确的做事方法。
    private class ContactListener extends Activity implements View.OnFocusChangeListener
    {
        @Override
        public void onFocusChange(View v, boolean hasFocus) {
            if (hasFocus) {
                Intent intent = new Intent(Intent.ACTION_PICK, Contacts.CONTENT_URI);
                _activity.startActivityForResult(intent, CONTACTS_RESULT);
            }
        }
    
        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            super.onActivityResult(requestCode, resultCode, data);
    
            if (requestCode == CONTACTS_RESULT && resultCode == RESULT_OK) {
                String cell = "?", firstName = "?", lastName = "?";
    
                uriContact = data.getData();
    
                Cursor cursor = null;
    
                mCell.setText(cell);
                mLastName.setText(lastName);
                mFirstName.setText(firstName);
            }
        }
    }
    
       Intent returnIntent = new Intent();
        returnIntent.putExtra("result",result);
        setResult(Activity.RESULT_OK,returnIntent);
        finish();