gpt4 book ai didi

androidx Activity 无法转换为 AccountAuthenticatorActivity

转载 作者:行者123 更新时间:2023-12-02 12:12:12 24 4
gpt4 key购买 nike

我有一个扩展了 AccountAuthenticatorActivity 的 LoginActivity。此 Activity 有几个 fragment ,即 androidx.fragment.app.Fragments。问题来 self 无法调用的 fragment :

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

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

更新:

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

AccountAuthenticatorActivity and fragments

最佳答案

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

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

那么AccountAuthenticatorActivity应该实现这个接口(interface)并在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;
}

关于androidx Activity 无法转换为 AccountAuthenticatorActivity,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59226978/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com