MPAndroidChart и привязка данных

У меня есть фрагмент, где у меня есть MPAndroidChart и textViews. Я понимаю, что MPAndroidChart не поддерживает привязку данных, как указано здесь: https://github.com/PhilJay/MPAndroidChart/issues/1382

Сейчас я использую ButterKnife для поиска представлений, но хочу перейти на привязку данных. Мне было интересно, поскольку MPAndroidChart не поддерживает привязку данных, можно ли использовать привязку данных и Butterknife в одном фрагменте?

Butterknife для MPAndroidChart и DataBinding для моих текстовых представлений.


person Community    schedule 27.08.2018    source источник


Ответы (4)


Да, это возможно,

Butterknife и Databinding — две разные вещи.

Но зачем тебе мастихин. Смотри ниже

<com.github.mikephil.charting.charts.PieChart
    android:id="@+id/pieChart"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

Вы можете получить доступ к этому полю, как это

ActivityMainBinding binding;
binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
binding.pieChart.setVisibility(Visibility.INVISIBLE)

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

person Khemraj Sharma    schedule 18.09.2018

Вы можете использовать PieChart с привязкой данных, следуя коду 1. Привяжите свой макет с помощью fragmnet.

setPieChart(fragmentDashboardBinding.piechart);

Объявить глобальную переменную круговой диаграммы

private PieChart piechart;   
    public void setPieChart(PieChart Pie_chart) {
            this.piechart = Pie_chart;
        }

И установите свои данные в методе обновления формы PieChart.

@Override
    public void update(Observable observable, Object arg) {

        DashboardViewModel dashboardViewModel = (DashboardViewModel) observable;
        drivingScore = dashboardViewModel.getDrivingScore();
        LoadPieChart(drivingScore);
    }

private void LoadPieChart(DrivingScore drivingScore) {
//Do any thing with your piechart
}
person Divyanshu    schedule 18.09.2018

Можно использовать MPAndroidChart с привязкой данных.

Создайте пользовательский адаптер привязки:

@BindingAdapter("android:setPieData")
fun setPieData(view: PieChart, data: List<SomeModel>?) {
val entries = mutableListOf<PieEntry>()

data.forEach { sweet ->
    // Fill the entires list
}
// Set the entries, decorate the pie  
}

Затем в xml:

<com.github.mikephil.charting.charts.PieChart
            android:id="@+id/consumed_data_sweets_rating_chart"
            android:layout_width="match_parent"
            android:layout_height="@dimen/chart_height"
            android:layout_gravity="center"
android:layout_margin="@dimen/material_component_cards_top_and_bottom_padding"
            android:setPieData="@{viewmodel.pieData}"

Где viewmodel.pieData — это LiveData<List<SomeModel>> models, переданное в класс ViewModel.

Таким образом, в основном вам нужно создавать пользовательские адаптеры привязки данных для любых свойств диаграмм, которые вы хотите установить.

Ссылка на мой проект, ищите класс ChartBindingAdapters, чтобы увидеть мои пользовательские адаптеры.

person Deividas Strioga    schedule 18.09.2018

Да, это возможно.

layout -tag должен быть в xml файле.

<layout >
        <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical">

            <com.github.mikephil.charting.charts.LineChart
                android:id="@+id/lineChart"
                android:layout_width="70dp"
                android:layout_height="60dp"
                android:orientation="vertical">
    <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="ok"
            android:id="@+id/button1"
            android:background="#0058b6" />


    </LinearLayout>

</layout>

В действии,

ActivityMainBinding binding; // Declaration

binding = DataBindingUtil.setContentView(this, R.layout.activity_main);

binding.lineChart.setVisibility(Visibility.VISIBLE);
binding.button1.setVisibility(Visibility.VISIBLE);

binding.button1.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
        // Perform action on click
    }
});
person Gayathri    schedule 20.02.2019