我在应用程序中创建功能时遇到问题。我希望我的应用程序一个选项卡中的按钮更新位于我的应用程序的另一个选项卡中的TextViews。不幸的是,我的解决方案不起作用-每当我触摸Button1时都会抛出NPE。我的代码:

应更新的标签:

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

public class SummaryFragment extends Fragment {

    TextView textViewOne;


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View summary= inflater.inflate(R.layout.fragment_summary, container, false);

        textViewOne = (TextView) summary.findViewById(R.id.books);
        textViewOne.setText("You have read " + Stats.book + " books");
        return summary;
    }

    public void updateStats() {
        textViewOne.setText("You have read " + Stats.book + " books");
    }


}


按钮所在的标签:

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;

public class ReadingStarted extends Fragment {

    static FirstPageFragmentListener firstPageListener;

    public SummaryFragment summaryFragment;


    public ReadingStarted() {
    }

    public ReadingStarted(FirstPageFragmentListener listener) {
        firstPageListener = listener;
    }

    @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View started = inflater.inflate(R.layout.fragment_started, container, false);

        Button button1 = (Button) started.findViewById(R.id.button1);
        button1.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {

                Stats.book=Stats.book+1;
                summaryFragment.updateStats();

            }
        });
    return started;
    }
}

最佳答案

您的代码中的问题:


SummaryFragment没有一个空的构造函数,每个片段都需要它
SummaryFragment summaryFragment应该是SummaryFragment summaryFragment = new SummaryFragmet(); //未执行初始化,因此summaryFragment.updateStats()中的npe;
片段之间的通信应通过活动来完成。


请参阅有关Fragments的开发人员文档。

10-08 07:00