【问题标题】:calendar code worked in activity but not in fragment日历代码在活动中有效,但在片段中无效
【发布时间】:2015-06-28 08:29:52
【问题描述】:

我在一个使用 Calendar 的 Activity 类中编写了一个代码,然后我将它移到了 Fragment,我通过调用:`

动态地将这个 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,说它不能在空对象引用上设置文本。

【问题讨论】:

    标签: java android android-fragments calendar fragment


    【解决方案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);
    

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

    【讨论】:

    • 谢谢!我还将 FrameLayout 更改为 xml 中的片段
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-18
    • 2013-01-16
    • 2011-12-17
    • 2019-04-28
    • 2016-02-24
    相关资源
    最近更新 更多