Как использовать интерфейс на фрагмент - PullRequest
0 голосов
/ 21 февраля 2019

В моем приложении я хочу реализовать некоторые 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 покажите мне ошибку!

Как я могу это исправить?

Ответы [ 2 ]

0 голосов
/ 21 февраля 2019

Если вы инициализируете это внутри onCreateView() или не используете вложенные коды, тогда iabHelper.startSetup(this) может неявно обслуживать ваш контекст как обычно.Также ссылка на непосредственный родительский класс, который в данном случае LoginCheckServiceConnection.

Но если вы углубляетесь во вложенный код, то только this не может неявно служить вашему контексту как обычно.Для этого вы можете явно написать, что iabHelper.startSetup(ServicesFragment.this);

0 голосов
/ 21 февраля 2019

Метод startSetup подпись.

public void startSetup(final OnIabSetupFinishedListener listener)

Проблема: - Вы передаете this, который даст ссылку на непосредственный родительский класс, который в данном случае равен LoginCheckServiceConnection.

Решение: - Используйте ClassName.this для получения ссылки на внешний класс, потому что ваш внешний класс уже реализует OnIabSetupFinishedListener.

iabHelper.startSetup(ServicesFragment.this);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...