如何在片段上使用接口

时间:2019-02-21 08:18:49

标签: java android android-fragments interface

在我的应用程序中,我想实现一些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时显示错误!

我该如何解决?

2 个答案:

答案 0 :(得分:2)

方法startSetup的签名是。

public void startSetup(final OnIabSetupFinishedListener listener)

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

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

iabHelper.startSetup(ServicesFragment.this);

答案 1 :(得分:2)

如果您在onCreateView()内初始化此代码或没有嵌套代码,则iabHelper.startSetup(this)可以照常隐式服务您的上下文。另外,在这种情况下,直接父类的引用是LoginCheckServiceConnection

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