2016-04-13 4 views
0

Как упражнение Я пытаюсь реализовать вертикальный SeekBar, расширяя AbsSeekBar. Я пытаюсь переопределить несколько методов, чтобы учесть новое позиционирование большого пальца, однако некоторые методы не распознаются, даже если они являются методами AbsSeekBar. Кроме того, когда я пытаюсь использовать переменные класса, определенные в суперклассе AbsSeekBar, они также не распознаются (эти переменные также не распознаются при использовании в AbsSeekBar, но по какой-то причине это не имеет значения). Что мне здесь не хватает?Android: Наследование виджета «Невозможно разрешить метод»

Я использую Android Studio 2.1 Preview 5. Вот код вплоть до одного из методов, который не неоспоримым признаваемых (когда завис над, он говорит: «Не удается разрешить метод„onStartTrackingTouch()“»

package com.example.user.testfour; 
import android.content.Context; 
import android.graphics.Canvas; 
import android.util.AttributeSet; 
import android.view.MotionEvent; 
import android.widget.AbsSeekBar; 
import android.widget.SeekBar; 


public class VerticalSeekBar extends AbsSeekBar { 

    public interface OnSeekBarChangeListener { 


     void onProgressChanged(VerticalSeekBar seekBar, int progress, boolean fromUser); 


     void onStartTrackingTouch(VerticalSeekBar seekBar); 


     void onStopTrackingTouch(VerticalSeekBar seekBar); 
    } 
    private OnSeekBarChangeListener mOnSeekBarChangeListener; 

    // Constructors 
    public VerticalSeekBar(Context context) {this(context, null);} 

    public VerticalSeekBar(Context context, AttributeSet attrs) { 
     this(context, attrs, com.android.internal.R.attr.seekBarStyle); 
    } 

    public VerticalSeekBar(Context context, AttributeSet attrs, int defStyleAttr) { 
     this(context, attrs, defStyleAttr, 0); 
    } 


    @Override 
    void onStartTrackingTouch() { 
     super.onStartTrackingTouch(); 
     if (mOnSeekBarChangeListener != null) { 
      mOnSeekBarChangeListener.onStartTrackingTouch(this); 
     } 
    } 
    ... 
} 

Edit: Вот некоторый код AbsSeekBar:.

package android.widget; 
import android.annotation.Nullable; 
import android.content.Context; 
import android.content.res.ColorStateList; 
import android.content.res.TypedArray; 
import android.graphics.Canvas; 
import android.graphics.Insets; 
import android.graphics.PorterDuff; 
import android.graphics.Rect; 
import android.graphics.Region.Op; 
import android.graphics.drawable.Drawable; 
import android.os.Bundle; 
import android.util.AttributeSet; 
import android.view.KeyEvent; 
import android.view.MotionEvent; 
import android.view.ViewConfiguration; 
import android.view.accessibility.AccessibilityNodeInfo; 

import com.android.internal.R; 

public abstract class AbsSeekBar extends ProgressBar { 
    // Lots of methods 
    ... 
    void onStartTrackingTouch() { 
     mIsDragging = true; 
    } 
    ... 
} 

SeekBar класс, который является частью предопределенных виджетов также распространяется AbsSeekBar и использует тот же самый код для переопределения метода onStartTrackingTouch() Там, @Override - als o отмечен как ошибка, но он компилируется без каких-либо проблем. Когда я пытаюсь в основном копировать код SeekBar, он не работает. Может ли эта ошибка быть связана с Android Studio или я пропущу что-то элементарное здесь?

+0

и код 'AbsSeekBar'? :) – mithrop

+0

Предоставлен некоторый код. –

ответ

0

AbsSeekBar не определяет метод, называемый onStartTrackingTouch, для фактического переопределения. Если вы хотите объявить этот метод в своем подклассе, просто удалите аннотацию @Override. Если вы действительно ожидали, что AbsSeekBar объявит этот метод, чтобы вы могли его переопределить, вам понадобится новая стратегия.

+0

AbsSeekBar определяет такой метод, виджет SeekBar, который также расширяет AbsSeekBar, переопределяет один и тот же метод без каких-либо проблем. –

0

AbsSeekBar не имеет способа void onStartTrackingTouch() поэтому вы не можете @Override. Я думаю, вам нужно определить этот метод в вашем слушателе OnSeekBarChangeListener.

+0

Я отредактировал мой вопрос, предоставив фрагмент кода AbsSeekBar. Он определяет onStartTrackingTouch(). Я также проверил, может ли я быть расшифрован в другом классе, также называемом AbsSeekBar, но это правильный класс. –

Смежные вопросы