MPAndroidChart和DataBinding

时间:2018-08-27 20:25:06

标签: java android mpandroidchart android-databinding butterknife

我有一个片段,其中有MPAndroidChart和textViews。我了解MPAndroidChart不支持数据绑定,如下所示: https://github.com/PhilJay/MPAndroidChart/issues/1382

现在,我正在使用ButterKnife查找我的视图,但想迁移到数据绑定。我想知道既然MPAndroidChart不支持数据绑定,是否可以在同一片段中同时使用数据绑定和Butterknife?

适用于MPAndroidChart的牛刀和适用于我的textviews的数据绑定。

4 个答案:

答案 0 :(得分:0)

是的,

牛刀和数据绑定是两回事。

但是为什么要吃牛刀。见下文

<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)

因此,当您使用数据绑定时,不需要花刀。

答案 1 :(得分:0)

您可以通过以下代码将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
}

答案 2 :(得分:0)

可以将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类中传递的viewmodel.pieDataLiveData<List<SomeModel>> models的地方。

因此,基本上,您必须为要设置的图表的任何属性添加自定义数据绑定适配器。

Link to my project,寻找ChartBindingAdapters类以查看我的自定义适配器。

答案 3 :(得分:0)

是的,有可能。

  

布局-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
    }
});