2016-05-07 2 views
2

Так я использую MPAndroidChart LineCharts, что означает в XML Я определяю это так:Попытки сделать выступающий класс для предварительно существующего класса в Android

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

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

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

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

и так в другом месте в моем коде, когда я хочу, чтобы использовать его, у меня есть:

private MyLineChart mChart; 

... 

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

И все это похоже на компиляцию, но затем он выдает ошибку времени выполнения, потому что говорит, что я не могу преобразовать LineChart в MyLineChart.

+1

Вы должны использовать MyLineChart в вашем XML слишком – Stefan

+0

Что вы показываете не «упаковка», то «расширение». И 'LineChart' не может быть передан в' MyLineChart', потому что первый не является подклассом последнего. 'MyLineChart' может быть передан в' LineChart', но не наоборот. –

+0

Я попытался использовать MyLineChart в XML (com.mypackagename.appname.MyLineChart), но затем у меня возникла ошибка раздувания при попытке раздувания макета активности. – user6183183

ответ

1

Чтобы сделать это возможным, используя MyLineChart в XML, вам нужно определить еще два конструктора там, как:

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? – user6183183

+0

для ввода атрибутов, передаваемых как 'android: id = ...', 'android: layout_width = ...' и т. Д. –

+0

Быстрый вопрос: означает ли это также, что я не могу передать никаких дополнительных аргументов, кроме контекста? Например, если я хотел бы передать некоторые другие переменные (например, аргумент фрагмента или аргумент Textview). – user6183183