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



我在一个使用Calendar的Activity类中编写了一段代码,然后将其移动到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设置Text的行上给出NullPointerException,表示它不能对Null对象引用设置Text。

替换此代码

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);

活动是你在上面膨胀片段的地方。但所有的TextViews都是片段xml的一部分,你必须从片段的视图访问它们,而不是从活动的视图访问。

最新更新