【问题标题】:How to use Interface on Fragment如何在 Fragment 上使用接口
【发布时间】:2019-07-15 02:00:05
【问题描述】:

在我的应用程序中,我希望 实现一些 interfacefragment
当使用这个interface 时,我写这个是为了添加listeners,但是显示错误并且不允许我使用这个!
我将以下代码写入片段:

public class ServicesFragment extends Fragment implements IabHelper.OnIabSetupFinishedListener {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_services, container, false);

    public class LoginCheckServiceConnection implements ServiceConnection {

        public void onServiceConnected(ComponentName name, IBinder boundService) {
            service = ILoginCheckService.Stub.asInterface((IBinder) boundService);
            try {
                boolean isLoggedIn = service.isLoggedIn();
                if (isLoggedIn) {
                    iabHelper = new IabHelper(context, bazaarRSA);
                    iabHelper.startSetup(this);
                } else {
                    if (Constants.isPackageInstalled(Constants.BAZAAR_PAYMENT_PACKAGE, packageManager)) {
                        Intent intent = new Intent(Intent.ACTION_MAIN);
                        intent.setComponent(new ComponentName(Constants.BAZAAR_PAYMENT_PACKAGE, Constants.BAZAAR_LOGIN_ACTIVITY));
                        startActivity(intent);
                    } else {
                        Toast.makeText(context, "Not installed market on your device", Toast.LENGTH_SHORT).show();
                    }
                }

            } catch (Exception e) {
                e.printStackTrace();
            }
        }

        public void onServiceDisconnected(ComponentName name) {
            service = null;
        }
    }
}

在此代码中:iabHelper.startSetup(this); 使用 this 时显示错误!

我该如何解决?

【问题讨论】:

    标签: java android android-fragments interface


    【解决方案1】:

    如果您在 onCreateView() 内初始化它或没有嵌套代码,则 iabHelper.startSetup(this) 可以像往常一样隐式地为您的上下文提供服务。也是直接父类的引用,在这种情况下是LoginCheckServiceConnection

    但是,如果您深入研究嵌套代码,那么只有 this 不能像往常一样隐式地为您的上下文提供服务。 为此,您可以明确写出iabHelper.startSetup(ServicesFragment.this);

    【讨论】:

      【解决方案2】:

      方法startSetup签名是。

      public void startSetup(final OnIabSetupFinishedListener listener)
      

      问题:- 您正在传递this,它将给出直接父类的引用,在这种情况下为LoginCheckServiceConnection

      解决方案:- 使用ClassName.this 获取外部类引用,因为您的外部类已经实现了OnIabSetupFinishedListener

      iabHelper.startSetup(ServicesFragment.this);
      

      【讨论】:

        猜你喜欢
        • 2017-06-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多