Перезапись ShareActionProvider

#java #android #shareactionprovider

#java #Android #shareactionprovider

Вопрос:

Я пытаюсь изменить функцию ShareActionProvider, чтобы я мог перехватить onClick событие и подготовить содержимое, которым я хочу поделиться, а затем вызвать setShareIntent() . До сих пор я только что скопировал исходный код для ShareActionProvider() to MyShareActionProvider() и пытался скомпилировать / выполнить с моей копией кода.

ShareActionProvider() Использование ActivityChooserModel и ActivityChooserView классы, которые определены внутри android.support.v7.internal.widget.ActivityChooserModel и

 android.support.v7.internal.widget.ActivityChooserView
  

Кажется, все в порядке, за исключением activityChooserView.setProvider(this) вызова onCreateActionView() функции.

     @Override
    public View onCreateActionView() {
        // Create the view and set its data model.
        ActivityChooserModel dataModel = ActivityChooserModel.get(mContext, mShareHistoryFileName);
        ActivityChooserView activityChooserView = new ActivityChooserView(mContext);
        activityChooserView.setActivityChooserModel(dataModel);

        // Lookup and set the expand action icon.
        TypedValue outTypedValue = new TypedValue();
        mContext.getTheme().resolveAttribute(R.attr.actionModeShareDrawable, outTypedValue, true);
        Drawable drawable = mContext.getResources().getDrawable(outTypedValue.resourceId);
        activityChooserView.setExpandActivityOverflowButtonDrawable(drawable); 

        activityChooserView.setProvider(this);

        // Set content description
        activityChooserView.setDefaultActionButtonContentDescription(
            R.string.shareactionprovider_share_with_application);
        activityChooserView.setExpandActivityOverflowButtonContentDescription(
            R.string.shareactionprovider_share_with);

        return activityChooserView;
    }
  

Кажется, что ActionProvider, который используется внутри activityChooser.setProvider() , происходит из android.support.v4.view.ActionProvider , а не android.view.ActionProvider .

Если я изменю импорт на ActionProvider to android.support.v4.view.ActionProvider , то компиляция пройдет нормально, и я смогу запустить свое приложение, но когда меню расширяется, я получаю сообщение об ошибке MyShareActionProvider (которое используется в menu.xml с полным путем и является расширенным классом android.support.v4.viewActionProvider ), которое не может быть приведено к android.viewActionProvider , что я и предполагаювозвращает inflater.inflate() .

Не уверен, как действовать дальше.

Спасибо, Гэри