【问题标题】:androidx activity can not be cast to AccountAuthenticatorActivityandroidx 活动无法转换为 AccountAuthenticatorActivity
【发布时间】:2019-12-07 14:29:47
【问题描述】:

我有一个扩展 AccountAuthenticatorActivity 的 LoginActivity。这个活动有几个片段,它们是 androidx.fragment.app.Fragments。问题来自我无法调用的片段:

((LoginActivity) getActivity()).setAccountAuthenticatorResult(intent.getExtras());

因为 LoginActivity 扩展了 AccountAuthenticatorActivity,它扩展了 android.app.activity 但 getActivity() 返回 androidx.fragment.app.FragmentActivity 不能转换为我的 LoginActivity。如果我使用 android.app.Fragment 我不能使用像 androidx Fragment 的 getViewLifecycleOwner() 这样的方法。那么这里的解决方案是什么?

更新:

虽然委托模式可以解决这个问题,但这个问题在这里有一个有趣的答案:

AccountAuthenticatorActivity and fragments

【问题讨论】:

  • 将整个项目迁移到androidx
  • 如果我的回答对你有帮助,请告诉我
  • 如果我的回答对您有帮助,请告诉我,如果有帮助,请接受为正确答案。
  • androidx中没有AccountAuthenticatorActivity。
  • 这能回答你的问题吗? AccountAuthenticatorActivity for AppCompat

标签: android casting androidx


【解决方案1】:

我认为一种解决方案是委托模式。它是一种技术,其中对象向外部表达某些行为,但实际上将实现该行为的责任委托给关联的对象。对于委托模式的实现,您应该使用这样的接口:

public interface Delegate extends Serializable {
    void setResult(Intent intent);
}

那么AccountAuthenticatorActivity应该实现这个接口并且在setResult里面调用这个方法。

 public void setResult(Intent intent){
        setAccountAuthenticatorResult(intent.getExtras());
 }

你的 Fragment 类应该是这样的:

public  class MYFragment extends Fragment {

    Delegate delegate;

    public static MYFragment newInstance(Delegate delegate){
        MYFragment fragment = new MYFragment();
        Bundle bundle = new Bundle();
        bundle.putSerializable("key", delegate);
        fragment.setArguments(bundle);
        return  fragment;
    }



    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup      container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.my_fragment,container,false);
        delegate = (Delegate) getArguments().getSerializable(<your_key>);
        delegate.setResult(<your_intent>);

        return view;
    }

【讨论】:

    【解决方案2】:

    我接受了委托模式的答案,但我仍然遇到 AccountAuthenticatorActivity 中的 androidx 片段的问题。我想我应该对 AppCompatDelegate 使用相同的模式。对于任何面临同样问题的人,我建议这个答案:AccountAuthenticatorActivity and fragments

    【讨论】:

      【解决方案3】:

      如上图所示,请将整个项目迁移到 androidx

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-09-12
        • 2020-03-29
        • 1970-01-01
        • 2018-05-19
        • 1970-01-01
        • 2020-08-11
        • 1970-01-01
        相关资源
        最近更新 更多