【问题标题】:Parcelable objct with another types MPAndroidChartParcelable objct 与其他类型 MPAndroidChart
【发布时间】: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


【解决方案1】:

Entry 的子类没有实现Parcelable,正如this question 的答案中所指出的那样。因此,它们不会反序列化为正确的不变量(BarEntryCandleEntry)等,而是反序列化为协变量Entry

您必须想办法解决这个问题,或者通过传递原始数据并在收件人内部创建Entry,或者提取数据的公共存储库并让收件人处理它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多