2016-05-07 5 views
2

だから、私はそれをこのように定義するXMLに意味MPAndroidChart LineChartsを使用しています:私は、さまざまなを使用してこのチャートを使用しようとしていますがは、Androidで既存のクラスの拡張クラスを作成しようとすると

<com.github.mikephil.charting.charts.LineChart 
    android:id="@+id/line_chart" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"/> 

private MyLineChart mChart; 

... 

mChart = new MyLineChart(getActivity()); 
mChart = (MyLineChart) findViewById(R.id.line_chart); 

public class MyLineChart extends com.github.mikephil.charting.charts.LineChart { 
    private Context mContext; 

    public MyLineChart(Context context) { 
     super(context); 
     mContext = context; 
    } 
    //... 

だから他の場所で私のコードでは、私はそれを使用したい場合は、私が持っている:デフォルトの設定など、ので、私はそれを拡張しようとするカスタムクラスを作りました

そして、すべての罰金コンパイルするようだが、それは私がMyLineChartに折れ線グラフを変換することはできませんと言うので、それはランタイムエラーがスローされます。

+1

すぎ – Stefan

+0

あなたは示して何それは、「ラッピング」ではありません"伸びる"。前者は後者のサブクラスではないので、 'LineChart'は' MyLineChart'にキャストできません。 'MyLineChart'は' LineChart'にキャストできますが、その逆はできません。 –

+0

XML(com.mypackagename.appname.MyLineChart)でMyLineChartを試してみましたが、アクティビティレイアウトを拡張しようとするとエラーが発生しました – user6183183

答えて

1

のようなXMLでMyLineChartを使用して、それを可能にするために、あなたは、そこにさらに2つのコンストラクタを定義する必要があります:あなたはXMLでMyLineChartを使用する必要が

public class MyLineChart extends com.github.mikephil.charting.charts.LineChart { 
    private Context mContext; 

    public MyLineChart(Context context) { 
     super(context); 
     mContext = context; 
    } 

    public MyLineChart(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     mContext = context; 
    } 

    public LineChart(Context context, AttributeSet attrs, int defStyle) { 
     super(context, attrs, defStyle); 
     mContext = context; 
    } 

    // ... 
} 
+0

なぜこれら三つのコンストラクタがあります必要なの? XMLビューとして含めることができるどのクラスにも必要ですか? ID = ... '、'アンドロイド:layout_width = ... 'など – user6183183

+0

これはまた、私はコンテキスト以外の任意の追加の引数を渡すことができないということですか?他のいくつかの変数(たとえば、Fragment引数やTextview引数など)を渡したい場合はどうすればよいでしょうか。 –

+0

クイック質問:アンドロイド'として渡された属性を注入する – user6183183

関連する問題