日历代码在 activity 中有效,但在片段中无效

calendar code worked in activity but not in fragment

我在使用 Calendar 的 Activity class 中编写了一段代码,然后将其移至 Fragment,并且我通过调用将此片段动态附加到 Activity: `

mFragmentManager = getFragmentManager();

        //mButtonsFragment = mFragmentManager.findFragmentById(R.id.fragment_buttons);
        mLayout1to6 = (FrameLayout) findViewById(R.id.fragment_1to6);
        final FragmentTransaction ft = mFragmentManager.beginTransaction();

        ft.add(R.id.fragment_1to6, f1to6);
        ft.addToBackStack(null);
        ft.commit();

        mFragmentManager
                .addOnBackStackChangedListener(new FragmentManager.OnBackStackChangedListener() {
                    public void onBackStackChanged() {
                        setLayout();
                    }
                });


        mFragmentManager.executePendingTransactions();
`

片段代码本身是这样的:

public class Fragment_1to6 extends Fragment {
    private Activity mActivity;

    Calendar calendar;
    String month_name;

    TextView month1;
    TextView month2;
    TextView month3;
    TextView month4;
    TextView month5;

    public void onAttach(Activity activity) {
        super.onAttach(activity);
        mActivity = activity;
    }

    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_fragment_1to6, container, false);
        month1 = (TextView) mActivity.findViewById(R.id.monthView1);
        month2 = (TextView) mActivity.findViewById(R.id.monthView2);
        month3 = (TextView) mActivity.findViewById(R.id.monthView3);
        month4 = (TextView) mActivity.findViewById(R.id.monthView5);

        calendar = Calendar.getInstance();
        setMonths();

            return view;

        }
    public void setCurrentMonthName() {

        SimpleDateFormat month_date = new SimpleDateFormat("MMM");
        month_name = month_date.format(calendar.getTime());
        month1.setText(month_name);
    }


    protected void getNextMonth(int i) {

        SimpleDateFormat dateFormat = new SimpleDateFormat("MMM");

        switch (i) {
            case 1:
                calendar.add(Calendar.MONTH, 1);
                month2.setText(dateFormat.format(calendar.getTime()));
                break;
            case 2:
                calendar.add(Calendar.MONTH, 1);
                month3.setText(dateFormat.format(calendar.getTime()));
                break;
            case 3:
                calendar.add(Calendar.MONTH, 1);
                month4.setText(dateFormat.format(calendar.getTime()));
                break;
            case 4:
                calendar.add(Calendar.MONTH, 1);
                month5.setText(dateFormat.format(calendar.getTime()));
                break;
        }

    }
    public void setMonths() {
        setCurrentMonthName();
        getNextMonth(1);
        getNextMonth(2);
        getNextMonth(3);
        getNextMonth(4);
    }


}
`

但是,当我 运行 它时,它在我在 textViews 上设置文本的那一行给出 NullPointerException,说它不能在空对象引用上设置文本。

替换此代码

month1 = (TextView) mActivity.findViewById(R.id.monthView1);
month2 = (TextView) mActivity.findViewById(R.id.monthView2);
month3 = (TextView) mActivity.findViewById(R.id.monthView3);
month4 = (TextView) mActivity.findViewById(R.id.monthView5);

month1 = (TextView) view.findViewById(R.id.monthView1);
month2 = (TextView) view.findViewById(R.id.monthView2);
month3 = (TextView) view.findViewById(R.id.monthView3);
month4 = (TextView) view.findViewById(R.id.monthView5);

Activity 是您在其上膨胀片段的地方。但是所有 TextView 都是片段 xml 的一部分,您必须从片段的视图而不是 activity 的视图访问它们。