2016-04-13 24 views
0

エクササイズとして、私はAbsSeekBarを拡張して垂直型SeekBarを実装しようとしています。私は親指の新しい位置を説明するためのいくつかのメソッドをオーバーライドしようとしていますが、AbsSeekBarのメソッドであっても認識されないメソッドもあります。また、AbsSeekBarのスーパークラスで定義されているクラス変数を使用しようとすると、これらも認識されません(これらの変数はAbsSeekBarで使用されても認識されませんが何らかの理由で問題になりません)。私はここで何が欠けていますか?Android:ウィジェットの継承 "メソッドを解決できません"

私は、Android Studioの2.1のプレビューを使用しています。ここ5. は、いくつかのコードがホバー時に(認識beeingていません方法の1までで、それが言う「メソッドを解決できません 『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); 
     } 
    } 
    ... 
} 

編集:ここ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はそのようなメソッドを定義していますが、AbsSeekBarを継承するSeekBarウィジェットは同じメソッドを問題なくオーバーライドします。 –

0

AbsSeekBarは無効な方法onStartTrackingTouch()を持たないため、@Overrideにはできません。 あなたのOnSeekBarChangeListenerリスナーでこのメソッドを定義する必要があります。

+0

私はAbsSeekBarのコードスニペットを提供して私の質問を編集しました。これはonStartTrackingTouch()を定義します。私はAbsSeekBarという名前の他のクラスにも拡張できるかどうかを調べましたが、正しいクラスです。 –

関連する問題