日历代码在活动中工作但不在片段中工作

时间:2015-06-28 08:29:52

标签: java android android-fragments calendar fragment

我在一个使用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上的setText行上给出NullPointerException,说它不能在Null对象引用上设置setText。

1 个答案:

答案 0 :(得分:1)

替换此代码

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

活动是您在其上夸大片段的地方。但是所有的TextView都是片段xml的一部分,你必须从片段的视图中访问它们,而不是从活动的视图中访问它们。

相关问题