Android Studio/Java空对象引用-can';似乎无法编辑活动中的片段变量

Android Studio/Java空对象引用-can';似乎无法编辑活动中的片段变量,java,android,object,reference,null,Java,Android,Object,Reference,Null,好吧,我是Android Studio的新手,如果这是一个愚蠢的问题,请容忍我,但我已经研究了好几个小时,试图找出为什么我不能做这件事,我似乎也弄不明白 我有一个主活动和两个片段。我试图编辑主活动片段中的公共变量(列表)。以下是我到目前为止是如何做到这一点的 在MainActivity中,我有以下几点: public class MainActivity extends AppCompatActivity implements Form.sendFormData, Chart.chartData

好吧,我是Android Studio的新手,如果这是一个愚蠢的问题,请容忍我,但我已经研究了好几个小时,试图找出为什么我不能做这件事,我似乎也弄不明白

我有一个主活动和两个片段。我试图编辑主活动片段中的公共变量(列表)。以下是我到目前为止是如何做到这一点的

在MainActivity中,我有以下几点:

public class MainActivity extends AppCompatActivity implements Form.sendFormData, Chart.chartData {

    private Form form = new Form();
    private Chart chart = new Chart();

    public MainActivity() {
        this.form = (Form) getSupportFragmentManager().findFragmentById(R.id.fragmentForm);
        this.chart = (Chart) getSupportFragmentManager().findFragmentById(R.id.fragmentChart);
    }

...
Form和Chart是我的两个片段,它们都不允许我编辑它们公开声明的变量

下面是我的图表课程开始时的样子:

public class Chart extends Fragment {

    private static final String TAG = "Chart";

    PieChart chart;

    public List<Entry> entryList = new ArrayList<>();
    public List<PieEntry> entries = new ArrayList<>();
...
编辑:

我应该提到,如果我声明
form
chart
如下,并且不尝试将它们引用到片段id,则代码将执行:

private Form form = new Form();
private Chart chart = new Chart();

然而,当我这样做的时候,片段实际上不会用我想要在其中更改的数据进行更新。因此,我假设问题在于对
getSupportFragmentManager()中片段的引用中。我似乎无法理解为什么引用为空。

尝试在片段中使用静态关键字,如下所示:

public static List<Entry> entryList = new ArrayList<>();
publicstaticlist entryList=newarraylist();
您的疑问是正确的。 问题在于:

public MainActivity() {
    this.form = (Form) getSupportFragmentManager().findFragmentById(R.id.fragmentForm);
    this.chart = (Chart) getSupportFragmentManager().findFragmentById(R.id.fragmentChart);
}
您不能在此处分配表格和图表。 在这里,没有任何观点被推翻。所以 findFragmentById(R.id.fragmentForm)和findFragmentById(R.id.fragmentChart)将为空

您可以在onCreate()中关联它们

我不喜欢一旦你遇到问题,只使用静态。
你可以试着找出它发生的原因。

请发布适当的代码,它们可以正常工作!非常感谢!你能解释一下为什么要这样吗?我不明白为什么方法和变量需要是静态的,才能从主活动中更改。如果您想在另一个java类中访问一个java类的变量,必须使用static关键字声明它。
public MainActivity() {
    this.form = (Form) getSupportFragmentManager().findFragmentById(R.id.fragmentForm);
    this.chart = (Chart) getSupportFragmentManager().findFragmentById(R.id.fragmentChart);
}
@Override
onCreate() {
    setContentVew(R.layout.my_view);

    this.form = (Form) getSupportFragmentManager().findFragmentById(R.id.fragmentForm);
    this.chart = (Chart) getSupportFragmentManager().findFragmentById(R.id.fragmentChart);
}