我试图让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>
答案 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);
}