在我的应用程序中,我想实现一些interface
到fragment
中!
使用此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
时显示错误!
我该如何解决?
答案 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);