2

Я пытаюсь сделать эффект разбития стекла на трут, как карточный стол. Карты работают нормально, но мне не удается получить контекст активности в адаптере, чтобы я мог использовать плагин breakview.Android: Получите контекст активности в класс адаптера массива

У меня есть моя основная активность, на этом мероприятии я показываю фрагмент, и на этом фрагменте я показываю карточный стол.

На этой стопку карты я хочу показать разбитое стекло анимации, когда пользователь нажимает на кнопку низкого рейтинга с помощью этой библиотеки:

https://github.com/zhanyongsheng/BrokenView

Так что в моем адаптере GetView я установить контекст для разбитого зрения с контекстом с этой линией:

mBrokenView = BrokenView.add2Window((MainActivity)this.getContext()); 

Но когда я бегу нажмите на кнопку я получаю эту ошибку:

ClassCastException: com.mysampleapp.Application cannot be cast to com.mysampleapp.MainActivity 

Благодарим за помощь.

Полный код ниже:

public class SongPreviewCardsDataAdapter extends ArrayAdapter<SongDatabaseMappingAdapter> { 

    public SongPreviewCardsDataAdapter(Context context, int resource) { 
     super(context, resource); 

    } 

    ImageButton oneStarRating; 
    BrokenView mBrokenView; 
    private BrokenTouchListener listener; 

    @Override 
    public View getView(int position, final View contentView, ViewGroup parent) { 

     // Initialise Song Views 
     final SongDatabaseMappingAdapter item = getItem(position); 

     TextView songName = (TextView) (contentView.findViewById(R.id.songNameTextView)); 
     songName.setText(item.getSongTitle()); 

     // Initialise Rating Buttons 
     oneStarRating = (ImageButton) contentView.findViewById(R.id.ratingButton1); 
     if (item.getOneStarRating()) { 
      oneStarRating.setImageResource(R.drawable.starfull); 

      mBrokenView = BrokenView.add2Window((MainActivity)this.getContext()); 
      listener = new BrokenTouchListener.Builder(mBrokenView).build(); 
      songName.setOnTouchListener(listener); 

     } 
+0

Пара вопросов здесь - почему бы вам явно нужен контекст MainActivity для сломанный вид? Что вы передаете как параметр контекста вашего конструктора адаптера? –

+0

Я не уверен, что вы имеете в виду в примере ion github brokenView = BrokenView.add2Window (контекст); а затем в ошибках, которые я получал add2window (android.app.Activity), не может быть применен к контексту содержимого Android. Поэтому я решил, что для этого нужен контекст активности. –

ответ

3

попробуйте вместо этого:

mBrokenView = BrokenView.add2Window((MainActivity)(parent.getContext())); 
+0

благодарит за ответ! Что или как я делал неправильно? –

+0

Когда вы создаете «Адаптер», вы, скорее всего, передаете «Контекст» в качестве аргумента конструктора. Что нужно иметь в виду, так это то, что 'Application'' Context' не совпадает с 'Activity'' Context'. Вы не можете бросать друг друга точно так же. Для библиотеки, которую вы используете, требуется «Активность», поэтому вы не можете использовать для этого «Контекст». 'Views' имеют' Activity' 'Context', которые вы можете получить с помощью' view.getContext() '. –

1

Попробуйте это:

mBrokenView = BrokenView.add2Window(contentView.getContext()); 
+0

Привет, я уже пробовал это, прежде чем задал вопрос. Я получаю, Ошибка: (84, 49) error: несовместимые типы: Контекст не может быть преобразован в Activity –

+0

Это странно. См. Мое редактирование. –

+0

Спасибо @ Eric unfortunateley, что не работает, такая же ошибка. Все хорошо, хотя реакция Бартекса сработала. –