为什么在片段中设置textview文本会导致崩溃?

时间:2015-02-12 01:50:07

标签: android android-fragments

我试图让TextView始终说出当前日期。但是,setText方法使用NullPointerExeption崩溃了程序......到目前为止,日期并不是问题 - 我只使用常规文本来测试它。我不知道放置代码的最佳位置,所以我决定使用onActivityCreated。发生了什么,还有什么可以让我的代码变得更好? *注意,textview位于fragment_page,而不是fragment_page 2,因为这是滑动标签布局中的第一个标签。

片段类

public class PageFragment extends Fragment {
public static final String ARG_PAGE = "ARG_PAGE";

private int mPage;

public static PageFragment newInstance(int page) {
    Bundle args = new Bundle();
    args.putInt(ARG_PAGE, page);
    PageFragment fragment = new PageFragment();
    fragment.setArguments(args);
    return fragment;
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    mPage = getArguments().getInt(ARG_PAGE);
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View view;
    if(mPage < 2) {
        view = inflater.inflate(R.layout.fragment_page, container, false);
    } else {
        view = inflater.inflate(R.layout.fragment_page_2, container, false);
    }


    return view;
}

//@Override
public void onActivityCreated(Bundle savedInstanceState){
    super.onActivityCreated(savedInstanceState);
    /*Calendar calendar = Calendar.getInstance();
    SimpleDateFormat dateFormat = new SimpleDateFormat("MMM dd, yyyy");


       */
        TextView textView = (TextView)     getView().findViewById(R.id.current_date);
        textView.setText("sadFace"); //null pointer exeption on this line
  }
}

片段XML

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:paddingLeft="16dp"
            android:paddingRight="16dp"
            android:paddingTop="16dp" >
            <ImageView
                android:layout_width="239dp"
                android:id="@+id/logo"
                android:layout_height="100dp"
                android:src="@drawable/logo"
                android:layout_alignParentStart="true"
                android:layout_alignParentLeft="true"/>

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:id="@+id/current_date"
                android:text="Today is January 1st, 2015"
                android:layout_toRightOf="@id/logo"
                android:gravity="center"
                android:layout_alignBottom="@id/logo"/>

        </RelativeLayout>
</LinearLayout>

2 个答案:

答案 0 :(得分:1)

问题在于

TextView textView = (TextView) getView().findViewById(R.id.current_date);

它自己工作,但导致空指针。我将getView()更改为getActivity(),现在效果非常好。

答案 1 :(得分:0)

onCreateView创建并返回与片段关联的视图层次结构。

将代码块移到onCreateView内,如果current_date仅在fragment_page中,那么您还应该将它们移到IF条件内。

    View view;
    if(mPage < 2) {
        view = inflater.inflate(R.layout.fragment_page, container, false);
        TextView textView = (TextView)view.findViewById(R.id.current_date);
        textView.setText("sadFace");
    } else {
        view = inflater.inflate(R.layout.fragment_page_2, container, false);
    }