【发布时间】:2017-04-02 17:15:01
【问题描述】:
public class DataForBinding implements Parcelable {
// private static final long serialVersionUID = 1L;
public ArrayList<BarEntry> barEntries;
public ArrayList<CandleEntry> candleEntries;
public ArrayList<Entry> lineEntries;
public DataForBinding() {
}
protected DataForBinding(Parcel in) {
barEntries=new ArrayList<BarEntry>();
candleEntries=new ArrayList<CandleEntry>();
lineEntries=new ArrayList<Entry>();
this.candleEntries = in.readArrayList(Entry.class.getClassLoader());
this.barEntries = in.readArrayList(Entry.class.getClassLoader());
this.lineEntries = in.readArrayList(Entry.class.getClassLoader());
}
public static final Creator<DataForBinding> CREATOR = new Creator<DataForBinding>() {
@Override
public DataForBinding createFromParcel(Parcel in) {
return new DataForBinding(in);
}
@Override
public DataForBinding[] newArray(int size) {
return new DataForBinding[size];
}
};
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeList(barEntries);
dest.writeList(candleEntries);
dest.writeList(lineEntries);
} //set&get
BarEntry 扩展 Entry
CandleEntry 扩展了 Entry
BarEntry 扩展了 Entry
Entry 扩展 BaseEntry 实现 Parcelable
我用它来发送/接收图表数据。 (第一个活动)
Intent intent = new Intent(getActivity(), MainTabActivity.class);
data = new DataForBinding();
data.candleEntries=generateCandleData();
data.barEntries=generateBarData();
data.lineEntries=generateLineData();
intent.putExtra("object",data);
startActivity(intent);
//--------------------------------------------- - (第二)
public class MainTabActivity extends AppCompatActivity {
Toolbar toolbar;
TabLayout tabLayout;
ViewPager viewPager;
ViewPagerAdapter adapter;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_tab);
DataForBinding data=getIntent().getParcelableExtra("object");
getIntent().putExtra("data_all",data);
}
我从一个活动发送到另一个活动,以及从第二个活动发送到选项卡中的片段的所有数据。 但在片段上,他只使用 Entry 类(lineEntries),并说 条目不能转换为 com.github.mikephil.charting.data.CandleEntry
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
mChart = (CombinedChart) getView().findViewById(R.id.chart_in_tab);
DataForBinding data = new DataForBinding();
ArrayList<BarEntry> barEntries = new ArrayList<>();
ArrayList<CandleEntry> candleEntries;
ArrayList<Entry> lineEntries = new ArrayList<>();
data = getActivity().getIntent().getParcelableExtra("data_all");
barEntries = data.getBarEntries();
candleEntries = data.getCandleEntries();
lineEntries = data.getLineEntries();
mChart = CombinedChartHelper.setSettings(mChart);
LineDataSet set2 = new LineDataSet(lineEntries, "line");
DataHelper.setLineDataSet(set2);
LineData dataLine = new LineData(set2);
CandleDataSet set1 = new CandleDataSet(candleEntries, "candle");
DataHelper.setCandleDataSet(set1);
CandleData dataCandle = new CandleData(set1);
CombinedData data = new CombinedData();
data.setData(dataLine);
【问题讨论】:
-
如果您在 Parcealable 从一个活动/片段发送到另一个活动/片段时遇到问题,并且它们在您自己的应用程序中,您可以只使用静态引用。请记住,完成后将其设置为空。没关系。有些对象太重/难以使用,例如位图。
标签: android fragment parcelable mpandroidchart