android - 我建立一个 Activity 图表是可以的,但是当我建立它的 fragment 时出现一些错误

标签 android charts

我创建这个 Activity 演示没问题,当我将它移动到 fragment 时,有一些

这里有错误

java.lang.NullPointerException: Attempt to invoke virtual method 'void 
    com.hrules.charter.CharterXLabels.setStickyEdges(boolean)' on a null object  reference at com.hb.bottomlast.Persion2_fragment.onCreateView(Persion2_fragment.java:73)`

代码在这里

/**
 * Created by uname on 2016/08/29 0029.
 */
public class Persion2_fragment extends Fragment {
    @BindView(R.id.charter_line)
    CharterLine charterLine;
    @BindView(R.id.charter_line_XLabel)
    CharterXLabels charterLineLabelX;
    @BindView(R.id.charter_line_with_XLabel)
    CharterLine charterLineWithLabel;
    @BindView(R.id.charter_line_YLabel)
    CharterYLabels charterLineYLabel;
    @BindView(R.id.charter_line_with_XMarker)
    CharterLine charterLineWithXMarker;
    @BindView(R.id.charter_line_XMarker)
    CharterXMarkers charterLineXMarkers;
    @BindView(R.id.charter_line_with_YMarker)
    CharterLine charterLineWithYMarker;
    @BindView(R.id.charter_line_YMarker)
    CharterYMarkers charterLineYMarkers;
    @BindView(R.id.ychart)
    CharterYLabels ychart;
    private static final int DEFAULT_ITEMS_COUNT = 7;
    private static final int DEFAULT_RANDOM_VALUE_MIN = 10;
    private static final int DEFAULT_RANDOM_VALUE_MAX = 100;

    private float[] values;
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        //super.onCreate(savedInstanceState);
        View view = inflater.inflate(R.layout.persion4, container, false);
        ButterKnife.bind(view);
        Resources res = getResources();
        int[] barColors = new int[]{
                res.getColor(R.color.colorAccent), res.getColor(R.color.colorAccent),
                res.getColor(R.color.colorAccent)
        };
        charterLineLabelX.setStickyEdges(true);
        String[] values3 = {"a", "4", "5", "7", "6", "3", "6"};
        charterLineLabelX.setValues(values3);
        // String[] values2={"1","6","5","4","3","2","7"};
        String[] values5 = {"1", "2", "3", "4", "5", "6", "7"};
        String[] values2 = this.getRightValues(values5);
        Log.d("values2", Arrays.toString(values2));
        ychart.setValues(values2);
        final float[] values4 = {1, 3, 3.5f, 4, 5, 6, 7};
        charterLineWithLabel.setValues(values4);
        charterLineWithLabel.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
//                values = fillRandomValues(DEFAULT_ITEMS_COUNT, DEFAULT_RANDOM_VALUE_MAX,
//                        DEFAULT_RANDOM_VALUE_MIN);
                charterLineWithLabel.setValues(values4);
                charterLineWithLabel.show();
                ychart.setValues(values4);
                charterLineLabelX.setValues(values4);
            }
        });
        return view;
    }
   private float[] fillRandomValues(int length, int max, int min) {
        Random random = new Random();
        float[] newRandomValues = new float[length];
        for (int i = 0; i < newRandomValues.length; i++) {
            //newRandomValues[i] = random.nextInt(max - min + 1) - min;
            newRandomValues[i]=i;
        }
        return newRandomValues;
    }
    public String[] getRightValues(String[] valuesPar) {
        String[] test = new String[valuesPar.length];
        for (int i = 0; i < valuesPar.length; i++) {
            if (i == 0||i==(valuesPar.length-1)){
                test[i] = valuesPar[i];
                continue;
            }
            test[i]=valuesPar[valuesPar.length-1-i];
        }
        return test;
    }
}

这里是xml

<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
>
<com.hrules.charter.CharterLine
    android:id="@+id/charter_line_with_XLabel"
    android:layout_width="fill_parent"
    android:layout_height="100dp"
    />
<com.hrules.charter.CharterXLabels
    android:id="@+id/charter_line_XLabel"
    android:layout_width="fill_parent"
    android:layout_height="20dp"
    />
</LinearLayout>

这里是 setStickyEdges

  public void setStickyEdges(boolean stickyEdges) {
    this.stickyEdges = stickyEdges;
    invalidate();
  }

最佳答案

从你的错误日志来看,charterLineLabelX 似乎是空的,所以你对 ButterKnife 的使用可能有一些错误。

我看到您在 fragment 中使用了 ButterKnife.bind(View),这是不正确的。

您应该将其替换为:

ButterKnife.bind(this, view)

更多信息,查看this

关于android - 我建立一个 Activity 图表是可以的,但是当我建立它的 fragment 时出现一些错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39283851/

相关文章:

listview中的Android edittext失去了对调用notifydatachanged的关注

android - 如何使用Android Studio导出jar文件?

java - 如何更改 Eclipse 中的工作区?

vba - 位置图表相对于 VBA 中的另一个图表(上方或下方)

javascript - 如何正确将php mysql数据传递给ChartJs

android - 如何知道 Retrofit 调用何时完成

java - 如何仅在测试运行时忽略类或方法

javascript - Chart.js : Strange Visual appearing in top left corner?

javascript - NVD3 为饼图的单个切片创建点击事件

javascript - 谷歌应用可视化可以吗?具有缩放选项的时间轴