如何在MainActivity中设置Fragment的数据
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在MainActivity中设置Fragment的数据相关的知识,希望对你有一定的参考价值。
我的代码有5个片段与TabLayout
和ViewPager
。代码启动时,名称为“UIstart”的函数初始化UI。而这个功能有
Boolean ValDate = homeFrag.ValidDate();
ValidDate()
在HomeFragment
,这是ViewPager
的第一页。 ValidDate()
在文本或按钮中设置数据。但是当ValidDate()
在UIstart中调用时,我得到了null对象错误。
我该如何修复代码?这是代码的一部分。
这是MainActivity
private void UIstart(){
Log.d(TAG, "UIstart: start");
NavigatorUI = Navigator.HOME;
ValDate = homeFrag.ValidDate();
....
}
这是HomeFragment
public class HomeFragment extends Fragment {
public String Valid_Date_from;
public String Valid_Date_to;
public String[] month = {
"Jan", "Feb", "Mar", "Apr",
"May", "Jun", "Jul", "Aug",
"Sept", "Oct", "Nov", "Dec"
};
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
view = inflater.inflate(R.layout.gatt_services_characteristics, container, false);
ValidDate();
return view;
}
public boolean ValidDate(){
logD(TAG, "ValidDate() Called");
Calendar cal = Calendar.getInstance();
String dateToString , timeToString ;
dateToString = String.format("%04d%02d%02d", cal.get(Calendar.YEAR), cal.get(Calendar.MONTH) + 1, cal.get(Calendar.DAY_OF_MONTH));
timeToString = String.format("%02d%02d", cal.get(Calendar.HOUR_OF_DAY), cal.get(Calendar.MINUTE));
int []weeks2 = {R.drawable.date_sun,R.drawable.date_mon,
R.drawable.date_tue,R.drawable.date_wed,R.drawable.date_thur,
R.drawable.date_fri,R.drawable.date_sat};
String valdatefrom = Valid_Date_from;
Calendar c2= Calendar.getInstance();
c2.set(parseInt(valdatefrom.substring(0, 4))
, parseInt(valdatefrom.substring(4, 6)) - 1
, parseInt(valdatefrom.substring(6, 8)));
String valdateto = Valid_Date_to;
Calendar c1= Calendar.getInstance();
c1.set(parseInt(valdateto.substring(0, 4))
, parseInt(valdateto.substring(4, 6)) - 1
, parseInt(valdateto.substring(6, 8)));
Button Valfrom = (Button) view.findViewById(R.id.Val_From_Button); // this code occur null object error
Button Valto = (Button) view.findViewById(R.id.Val_To_Button);
TextView Valmonthfrom = (TextView) view.findViewById(R.id.Val_Month_From);
TextView Valmonthto = (TextView) view.findViewById(R.id.Val_Month_To);
TextView Valyearfrom = (TextView) view.findViewById(R.id.Val_Year_From);
TextView Valyearto = (TextView) view.findViewById(R.id.Val_Year_To);
TextView Valtimefrom = (TextView) view.findViewById(R.id.Val_Time_From);
TextView Valtimeto = (TextView) view.findViewById(R.id.Val_Time_To);
TextView valto_center = (TextView) view.findViewById(R.id.valto_center);
FrameLayout ExpireLayout = (FrameLayout) view.findViewById(R.id.Expire_Frame);
....
}
在返回view
之前,你试图调用ValidDate()
方法。 onCreateView()
返回view
,基于view.findViewById()
将能够绑定控件。在你的情况下,你没有返回view
,因此NPE
。
尝试在ValidDate()
中调用onViewCreated()
方法。
正如阿卜杜勒在评论中提到的那样,ValDate = homeFrag.ValidDate();
不是必需的。
我认为你应该在ViewPager适配器初始化之后调用homeFrag.ValidDate()
方法,所以可能在你的活动UiStart
方法中做onCreate()
并在onCreate()
中初始化viewpager适配器然后覆盖onPostCreated()
并调用homeFrag.ValidDate()
以上是关于如何在MainActivity中设置Fragment的数据的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Android DatePicker 中设置最小和最大日期?
如何在运行时在由 android studio 创建的导航抽屉中设置默认片段