我有一个片段,其中有MPAndroidChart和textViews。我了解MPAndroidChart不支持数据绑定,如下所示: https://github.com/PhilJay/MPAndroidChart/issues/1382
现在,我正在使用ButterKnife查找我的视图,但想迁移到数据绑定。我想知道既然MPAndroidChart不支持数据绑定,是否可以在同一片段中同时使用数据绑定和Butterknife?
适用于MPAndroidChart的牛刀和适用于我的textviews的数据绑定。
答案 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.pieData
是LiveData<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
}
});