【问题标题】:onActivityResult not getting called from fragmentsonActivityResult 没有从片段中调用
【发布时间】:2014-11-17 10:15:34
【问题描述】:

我有这个片段,它使用启动活动来调用活动以获得结果。此活动应该显示锁定模式。问题是永远不会调用“onActivityResult”。我放了一些祝酒词来检查,但它从来没有被打印出来。

    public class int_Create_Pattern extends Fragment {
    private static final int REQ_CREATE_PATTERN = 1;

    @Override
    public void onStart() {
        // TODO Auto-generated method stub

        super.onStart();
        LockPatternView.MATRIX_WIDTH = 4;
        Intent intent = new Intent(LockPatternActivity.ACTION_CREATE_PATTERN,
                null, getActivity().getBaseContext(), LockPatternActivity.class);
        startActivityForResult(intent, REQ_CREATE_PATTERN);
    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(resultCode, resultCode, data);

        switch (requestCode) {
        case REQ_CREATE_PATTERN: {
            if (resultCode == LockPatternActivity.RESULT_OK) {
                char[] pattern = data
                        .getCharArrayExtra(LockPatternActivity.EXTRA_PATTERN);
                DataBaseHandler handler = new DataBaseHandler(getActivity()
                        .getApplicationContext());
                handler.open();

                String PatternToWrite = new String(pattern);
                handler.createPattern(PatternToWrite);
                handler.close();
                Log.d("DEBUG", new String(pattern));

                Toast.makeText(getActivity().getApplicationContext(),
                        "Pattern Recorded", Toast.LENGTH_LONG).show();

            }
            if (resultCode == LockPatternActivity.RESULT_CANCELED) {

                Toast.makeText(getActivity().getApplicationContext(),
                        "Pattern Cancelled", Toast.LENGTH_LONG).show();
            }
            break;
        }// REQ_CREATE_PATTERN

        }

    }

   }

【问题讨论】:

标签: android android-activity android-fragments onactivityresult


【解决方案1】:

onActivityResult 应该是一个 Activity 方法,而不是在 Fragment 上。 另一个问题是你不应该从 Fragment 调用新的 Activity。实现一个用于通信的接口,如下面的链接所述

http://developer.android.com/training/basics/fragments/communicating.html

保存您的片段的活动应该负责调用新活动并处理结果。

【讨论】:

  • 所以我应该从片段中调用另一个活动,然后在该活动中处理我的所有信息?
  • 没有。在您的片段中,您应该告诉您的活动,它需要为结果开始一个新活动。您可以使用链接中描述的界面来执行此操作。 “onActivityResult”应该在第一个活动中。如果您想将结果传递给片段,您可以实现同一链接中描述的代码developer.android.com/training/basics/fragments/…
【解决方案2】:
In Parent Class: do this code

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.dualPane);
    fragment.onActivityResult(requestCode, resultCode, data);
} 
In Child Class:

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
   //in fragment class callback 
} 

【讨论】:

  • 我刚刚从here 尝试过。它没有工作
  • 您遇到了什么错误,您可能会遗漏一些与我之前多次使用的代码相同的东西...
  • 请分享您的家长班
猜你喜欢
  • 1970-01-01
  • 2019-12-05
  • 2011-09-03
相关资源
最近更新 更多