TextView的NullPointerException异常实施片段TimePicker [英] TextView NullPointerException implementing TimePicker in Fragment
问题描述
实施TimePicker对话框中的片段使用DialogFragment并获得抛出ClassCastException
logcat的:
2月2日至15日:44:29.199:E / AndroidRuntime(1297):致命异常:主要
2月2日至十五日:44:29.199:E / AndroidRuntime(1297):工艺:com.example.datetimeabs,PID:1297
2月2日至十五日:44:29.199:E / AndroidRuntime(1297):java.lang.ClassCastException:com.example.datetimeabs.MainActivity@b1d75900必须实现com.example.datetimeabs.TimePickerFragment $ TimePickedListener
2月2日至十五日:44:29.199:E / AndroidRuntime(1297):在com.example.datetimeabs.TimePickerFragment.onAttach(TimePickerFragment.java:40)
2月2日至十五日:44:29.199:E / AndroidRuntime(1297):在android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:883)
2月2日至十五日:44:29.199:E / AndroidRuntime(1297):在android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1104)
2月2日至十五日:44:29.199:E / AndroidRuntime(1297):在android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682)
2月2日至十五日:44:29.199:E / AndroidRuntime(1297):在android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1460)
2月2日至十五日:44:29.199:E / AndroidRuntime(1297):在android.support.v4.app.FragmentManagerImpl $ 1.run(FragmentManager.java:440)
2月2日至十五日:44:29.199:E / AndroidRuntime(1297):在android.os.Handler.handleCallback(Handler.java:733)
2月2日至十五日:44:29.199:E / AndroidRuntime(1297):在android.os.Handler.dispatchMessage(Handler.java:95)
2月2日至十五日:44:29.199:E / AndroidRuntime(1297):在android.os.Looper.loop(Looper.java:136)
2月2日至十五日:44:29.199:E / AndroidRuntime(1297):在android.app.ActivityThread.main(ActivityThread.java:5017)
2月2日至十五日:44:29.199:E / AndroidRuntime(1297):在java.lang.reflect.Method.invokeNative(本机方法)
2月2日至十五日:44:29.199:E / AndroidRuntime(1297):在java.lang.reflect.Method.invoke(Method.java:515)
2月2日至十五日:44:29.199:E / AndroidRuntime(1297):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:779)
2月2日至十五日:44:29.199:E / AndroidRuntime(1297):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
2月2日至十五日:44:29.199:E / AndroidRuntime(1297):在dalvik.system.NativeStart.main(本机方法)
2月二日至15日:44:32.679:I /流程(1297):发送信号。 PID:1297 SIG:9
我下面这个教程: http://www.lukehorvat.com /博客/ Android的时间选择器,例如/ ,你可以看到的 TimePickerFragment.java 过,对此我用我的code!
FragmentTab1.java:
公共类FragmentTab1扩展SherlockFragment实现TimePickedListener { 按钮buttonDate;
按钮buttonTime; TextView的textDate;
TextView的textTime; @覆盖
公共查看onCreateView(LayoutInflater充气器,容器的ViewGroup,
捆绑savedInstanceState){
查看rootView = inflater.inflate(R.layout.fragmenttab1,集装箱,FALSE); buttonDate =(按钮)rootView.findViewById(R.id.btnDate);
buttonTime =(按钮)rootView.findViewById(R.id.btnTime); textDate =(TextView中)rootView.findViewById(R.id.txtDate);
textTime =(TextView中)rootView.findViewById(R.id.txtTime); //日历类得到的android手机时钟的当前实例
日历C = Calendar.getInstance(); //格式化对象的日期和时间
SimpleDateFormat的sdfTime =新的SimpleDateFormat(HH:mm的); //保存日期和时间字符串对象。
串strTime = sdfTime.format(c.getTime());
textTime.setText(strTime); SimpleDateFormat的sdfDate =新的SimpleDateFormat(DD-MMM-YYYY);
串strDate = sdfDate.format(c.getTime());
textDate.setText(strDate); buttonTime.setOnClickListener(新OnClickListener()
{
@覆盖
公共无效的onClick(视图v)
{
//显示时间选择器对话框
TimePickerFragment newFragment =新TimePickerFragment();
newFragment.show(getActivity()getSupportFragmentManager(),timePicker);
}
});
返回rootView;
} @覆盖
公共无效onTimePicked(日历时间)
{
//在TextView中显示选定的时间
textTime.setText(DateFormat.format(HH:mm的,时间));
}}
MainActivity.java: -
公共类MainActivity扩展SherlockFragmentActivity {
//声明变量
私人FragmentTabHost mTabHost; @覆盖
保护无效的onCreate(捆绑savedInstanceState){
super.onCreate(savedInstanceState);
//设置从main_fragment.xml视图
的setContentView(R.layout.main_fragment); //在main_fragment.xml找到android.R.id.tabhost
mTabHost =(FragmentTabHost)findViewById(android.R.id.tabhost); //创建main_fragment.xml标签
mTabHost.setup(这一点,getSupportFragmentManager(),R.id.tabcontent); //在res文件夹的自定义图像创建TAB1
mTabHost.addTab(mTabHost.newTabSpec(TAB1)。setIndicator(,getResources()。getDrawable(R.drawable.tab1)),
FragmentTab1.class,NULL); //创建TAB2
mTabHost.addTab(mTabHost.newTabSpec(TAB2)。setIndicator(TAB2),
FragmentTab2.class,NULL); //创建TAB3
mTabHost.addTab(mTabHost.newTabSpec(TAB3)。setIndicator(TAB3),
FragmentTab3.class,NULL);
}
}
TimePickerFragment.java: -
公共类TimePickerFragment扩展DialogFragment实现TimePickerDialog.OnTimeSetListener
{
私人TimePickedListener mListener;@覆盖
公共对话框onCreateDialog(捆绑savedInstanceState)
{
//使用当前时间作为选择器的默认值
最后的日历C = Calendar.getInstance();
INT小时= c.get(Calendar.HOUR_OF_DAY);
INT分钟= c.get(Calendar.MINUTE);//创建TimePickerDialog的一个新实例,并将其返回
返回新TimePickerDialog(getActivity(),这个,小时,分钟,DateFormat.is24HourFormat(getActivity()));
}@覆盖
公共无效onAttach(活动活动)
{
//当最初显示的片段(即附着在活性),铸的活性回调接口类型
super.onAttach(活动);
尝试
{
mListener =(TimePickedListener)活性;
}
赶上(抛出ClassCastException E)
{
抛出新ClassCastException异常(activity.toString()+必须实现+ TimePickedListener.class.getName());
}
}@覆盖
公共无效onTimeSet(TimePicker观点,诠释HOUROFDAY,分整型)
{
被选择的时间//时,通过它的回调接口的方法将其发送到活动
日历C = Calendar.getInstance();
c.set(Calendar.HOUR_OF_DAY,HOUROFDAY);
c.set(Calendar.MINUTE,分钟);mListener.onTimePicked(C);
}公共静态界面TimePickedListener
{
公共无效onTimePicked(日历时间);
}
}
编辑code: 信用卡的去@Luksprog
FragmentTab1.java:
公共类FragmentTab1扩展SherlockFragment {按钮buttonDate;
按钮buttonTime;TextView的textDate;
TextView的textTime;@覆盖
公共查看onCreateView(LayoutInflater充气器,容器的ViewGroup,
捆绑savedInstanceState){
查看rootView = inflater.inflate(R.layout.fragmenttab1,集装箱,FALSE); buttonDate =(按钮)rootView.findViewById(R.id.btnDate);
buttonTime =(按钮)rootView.findViewById(R.id.btnTime); textDate =(TextView中)rootView.findViewById(R.id.txtDate);
textTime =(TextView中)rootView.findViewById(R.id.txtTime); //日历类得到的android手机时钟的当前实例
日历C = Calendar.getInstance(); //格式化对象的日期和时间
SimpleDateFormat的sdfTime =新的SimpleDateFormat(HH:mm的); //保存日期和时间字符串对象。
串strTime = sdfTime.format(c.getTime());
textTime.setText(strTime); SimpleDateFormat的sdfDate =新的SimpleDateFormat(DD-MMM-YYYY);
串strDate = sdfDate.format(c.getTime());
textDate.setText(strDate); buttonTime.setOnClickListener(新OnClickListener()
{
@覆盖
公共无效的onClick(视图v)
{
//显示时间选择器对话框
TimePickerFragment newFragment =新TimePickerFragment();
newFragment.show(getActivity()getSupportFragmentManager(),timePicker);
}
});
返回rootView;
}公共无效onTimePicked(日历时间)
{
SimpleDateFormat的sdfTime =新的SimpleDateFormat(HH:mm的);
串strTime = sdfTime.format(time.getTime());
Log.i(onTimePicked>>>中,strTime);
//在TextView中显示选定的时间
textTime.setText(DateFormat.format(HH:mm的,时间));
}}
MainActivity.java:
公共类MainActivity扩展SherlockFragmentActivity实现TimePickedListener {
//声明变量
私人FragmentTabHost mTabHost; FragmentTab1 fragmentTab1; @覆盖
保护无效的onCreate(捆绑savedInstanceState){
super.onCreate(savedInstanceState);
//设置从main_fragment.xml视图
的setContentView(R.layout.main_fragment); fragmentTab1 =新FragmentTab1(); //在main_fragment.xml找到android.R.id.tabhost
mTabHost =(FragmentTabHost)findViewById(android.R.id.tabhost); //创建main_fragment.xml标签
mTabHost.setup(这一点,getSupportFragmentManager(),R.id.tabcontent); //在res文件夹的自定义图像创建TAB1
mTabHost.addTab(mTabHost.newTabSpec(TAB1)。setIndicator(,getResources()。getDrawable(R.drawable.tab1)),
FragmentTab1.class,NULL); //创建TAB2
mTabHost.addTab(mTabHost.newTabSpec(TAB2)。setIndicator(TAB2),
FragmentTab2.class,NULL); //创建TAB3
mTabHost.addTab(mTabHost.newTabSpec(TAB3)。setIndicator(TAB3),
FragmentTab3.class,NULL);
} @覆盖
公共无效onTimePicked(日历时间){
// TODO自动生成方法存根
fragmentTab1.onTimePicked(时间);
}}
异常行:
textTime.setText(DateFormat.format(HH:mm的,时间));
新的日志:
4月2日至一十五日:18:40.149:D / dalvikvm(1469):GC_FOR_ALLOC释放< 1K,4%免费5141K / 5324K,暂停42ms,总42ms
4月二日日至15日:18:40.349:I /编舞(1469):跳过126帧!该应用程序可能会做它的主线程的工作太多了。
4月二日日至15日:18:40.939:I /编舞(1469):46跳过帧!该应用程序可能会做它的主线程的工作太多了。
4月二日日至15日:18:49.669:I / onTimePicked>>>(1469):上午8时25分
4月二日日至15日:18:49.669:D / AndroidRuntime(1469):关闭VM
4月二日日至15日:18:49.729:W / dalvikvm(1469):主题ID = 1:螺纹未捕获的异常(组= 0xb1a94ba8)退出
4月二日日至15日:18:49.739:E / AndroidRuntime(1469):致命异常:主要
4月二日日至15日:18:49.739:E / AndroidRuntime(1469):工艺:com.example.datetimeabs,PID:1469
4月二日日至15日:18:49.739:E / AndroidRuntime(1469):显示java.lang.NullPointerException
4月二日日至15日:18:49.739:E / AndroidRuntime(1469):在com.example.datetimeabs.FragmentTab1.onTimePicked(FragmentTab1.java:73)
4月二日日至15日:18:49.739:E / AndroidRuntime(1469):在com.example.datetimeabs.MainActivity.onTimePicked(MainActivity.java:47)
4月二日日至15日:18:49.739:E / AndroidRuntime(1469):在com.example.datetimeabs.TimePickerFragment.onTimeSet(TimePickerFragment.java:52)
4月二日日至15日:18:49.739:E / AndroidRuntime(1469):在android.app.TimePickerDialog.tryNotifyTimeSet(TimePickerDialog.java:130)
4月二日日至15日:18:49.739:E / AndroidRuntime(1469):在android.app.TimePickerDialog.onClick(TimePickerDialog.java:115)
4月二日日至15日:18:49.739:E / AndroidRuntime(1469):在com.android.internal.app.AlertController $ ButtonHandler.handleMessage(AlertController.java:166)
4月二日日至15日:18:49.739:E / AndroidRuntime(1469):在android.os.Handler.dispatchMessage(Handler.java:102)
4月二日日至15日:18:49.739:E / AndroidRuntime(1469):在android.os.Looper.loop(Looper.java:136)
4月二日日至15日:18:49.739:E / AndroidRuntime(1469):在android.app.ActivityThread.main(ActivityThread.java:5017)
4月二日日至15日:18:49.739:E / AndroidRuntime(1469):在java.lang.reflect.Method.invokeNative(本机方法)
4月二日日至15日:18:49.739:E / AndroidRuntime(1469):在java.lang.reflect.Method.invoke(Method.java:515)
4月二日日至15日:18:49.739:E / AndroidRuntime(1469):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:779)
4月二日日至15日:18:49.739:E / AndroidRuntime(1469):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
4月二日日至15日:18:49.739:E / AndroidRuntime(1469):在dalvik.system.NativeStart.main(本机方法)
实施TimePicker对话框中的片段使用DialogFragment和
越来越抛出ClassCastException
块引用>唯一的例外是告诉你,
MainActivity
需要实现TimePickerFragment $ TimePickedListener
接口,并提供了一个实现onTimePicked()
方法。
新的日志:
块引用>看起来异常,因为你没有正确与你互动的片段,在你拨打
onTimePicked(时间)
错误的第一个片段选项卡。这片段是不是在onTimePicked
回调FragmentTabHost
使用了它的第一个选项卡中的片段,它只是你手动实例化一个片段(以fragmentTab1 =新FragmentTab1( );
)。这种手动实例化片段没有连接到活动
并没有一个看法,因为没有它的回调被称为。要访问正确的片段使用
FragmentManager
先找到它:@覆盖
公共无效onTimePicked(日历时间){
FragmentTab1 FT1 =(FragmentTab1)getSupportFragmentManager()findFragmentByTag(TAB1);
fragmentTab1.onTimePicked(时间);
}Implementing TimePicker Dialog in Fragment using DialogFragment and getting ClassCastException
Logcat:
02-15 02:44:29.199: E/AndroidRuntime(1297): FATAL EXCEPTION: main 02-15 02:44:29.199: E/AndroidRuntime(1297): Process: com.example.datetimeabs, PID: 1297 02-15 02:44:29.199: E/AndroidRuntime(1297): java.lang.ClassCastException: com.example.datetimeabs.MainActivity@b1d75900 must implement com.example.datetimeabs.TimePickerFragment$TimePickedListener 02-15 02:44:29.199: E/AndroidRuntime(1297): at com.example.datetimeabs.TimePickerFragment.onAttach(TimePickerFragment.java:40) 02-15 02:44:29.199: E/AndroidRuntime(1297): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:883) 02-15 02:44:29.199: E/AndroidRuntime(1297): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1104) 02-15 02:44:29.199: E/AndroidRuntime(1297): at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682) 02-15 02:44:29.199: E/AndroidRuntime(1297): at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1460) 02-15 02:44:29.199: E/AndroidRuntime(1297): at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:440) 02-15 02:44:29.199: E/AndroidRuntime(1297): at android.os.Handler.handleCallback(Handler.java:733) 02-15 02:44:29.199: E/AndroidRuntime(1297): at android.os.Handler.dispatchMessage(Handler.java:95) 02-15 02:44:29.199: E/AndroidRuntime(1297): at android.os.Looper.loop(Looper.java:136) 02-15 02:44:29.199: E/AndroidRuntime(1297): at android.app.ActivityThread.main(ActivityThread.java:5017) 02-15 02:44:29.199: E/AndroidRuntime(1297): at java.lang.reflect.Method.invokeNative(Native Method) 02-15 02:44:29.199: E/AndroidRuntime(1297): at java.lang.reflect.Method.invoke(Method.java:515) 02-15 02:44:29.199: E/AndroidRuntime(1297): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 02-15 02:44:29.199: E/AndroidRuntime(1297): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 02-15 02:44:29.199: E/AndroidRuntime(1297): at dalvik.system.NativeStart.main(Native Method) 02-15 02:44:32.679: I/Process(1297): Sending signal. PID: 1297 SIG: 9
I am following this tutorial : http://www.lukehorvat.com/blog/android-time-picker-example/ and you can see TimePickerFragment.java too, which i am using in my code!
FragmentTab1.java:
public class FragmentTab1 extends SherlockFragment implements TimePickedListener{ Button buttonDate; Button buttonTime; TextView textDate; TextView textTime; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.fragmenttab1, container, false); buttonDate = (Button) rootView.findViewById(R.id.btnDate); buttonTime = (Button) rootView.findViewById(R.id.btnTime); textDate = (TextView) rootView.findViewById(R.id.txtDate); textTime = (TextView) rootView.findViewById(R.id.txtTime); // calendar class get the current instance of android phone clock Calendar c = Calendar.getInstance(); // a formatted object for date and time SimpleDateFormat sdfTime = new SimpleDateFormat("HH:mm a"); // save date and time in string object. String strTime = sdfTime.format(c.getTime()); textTime.setText(strTime); SimpleDateFormat sdfDate = new SimpleDateFormat("dd-MMM-yyyy"); String strDate = sdfDate.format(c.getTime()); textDate.setText(strDate); buttonTime.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // show the time picker dialog TimePickerFragment newFragment = new TimePickerFragment(); newFragment.show(getActivity().getSupportFragmentManager(), "timePicker"); } }); return rootView; } @Override public void onTimePicked(Calendar time) { // display the selected time in the TextView textTime.setText(DateFormat.format("HH:mm a", time)); } }
MainActivity.java:-
public class MainActivity extends SherlockFragmentActivity{ // Declare Variables private FragmentTabHost mTabHost; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Set the view from main_fragment.xml setContentView(R.layout.main_fragment); // Locate android.R.id.tabhost in main_fragment.xml mTabHost = (FragmentTabHost) findViewById(android.R.id.tabhost); // Create the tabs in main_fragment.xml mTabHost.setup(this, getSupportFragmentManager(), R.id.tabcontent); // Create Tab1 with a custom image in res folder mTabHost.addTab(mTabHost.newTabSpec("tab1").setIndicator("", getResources().getDrawable(R.drawable.tab1)), FragmentTab1.class, null); // Create Tab2 mTabHost.addTab(mTabHost.newTabSpec("tab2").setIndicator("Tab2"), FragmentTab2.class, null); // Create Tab3 mTabHost.addTab(mTabHost.newTabSpec("tab3").setIndicator("Tab3"), FragmentTab3.class, null); } }
TimePickerFragment.java:-
public class TimePickerFragment extends DialogFragment implements TimePickerDialog.OnTimeSetListener { private TimePickedListener mListener; @Override public Dialog onCreateDialog(Bundle savedInstanceState) { // use the current time as the default values for the picker final Calendar c = Calendar.getInstance(); int hour = c.get(Calendar.HOUR_OF_DAY); int minute = c.get(Calendar.MINUTE); // create a new instance of TimePickerDialog and return it return new TimePickerDialog(getActivity(), this, hour, minute, DateFormat.is24HourFormat(getActivity())); } @Override public void onAttach(Activity activity) { // when the fragment is initially shown (i.e. attached to the activity), cast the activity to the callback interface type super.onAttach(activity); try { mListener = (TimePickedListener) activity; } catch (ClassCastException e) { throw new ClassCastException(activity.toString() + " must implement " + TimePickedListener.class.getName()); } } @Override public void onTimeSet(TimePicker view, int hourOfDay, int minute) { // when the time is selected, send it to the activity via its callback interface method Calendar c = Calendar.getInstance(); c.set(Calendar.HOUR_OF_DAY, hourOfDay); c.set(Calendar.MINUTE, minute); mListener.onTimePicked(c); } public static interface TimePickedListener { public void onTimePicked(Calendar time); } }
Edited Code: Credit goes to @Luksprog
FragmentTab1.java:
public class FragmentTab1 extends SherlockFragment{ Button buttonDate; Button buttonTime; TextView textDate; TextView textTime; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.fragmenttab1, container, false); buttonDate = (Button) rootView.findViewById(R.id.btnDate); buttonTime = (Button) rootView.findViewById(R.id.btnTime); textDate = (TextView) rootView.findViewById(R.id.txtDate); textTime = (TextView) rootView.findViewById(R.id.txtTime); // calendar class get the current instance of android phone clock Calendar c = Calendar.getInstance(); // a formatted object for date and time SimpleDateFormat sdfTime = new SimpleDateFormat("HH:mm a"); // save date and time in string object. String strTime = sdfTime.format(c.getTime()); textTime.setText(strTime); SimpleDateFormat sdfDate = new SimpleDateFormat("dd-MMM-yyyy"); String strDate = sdfDate.format(c.getTime()); textDate.setText(strDate); buttonTime.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // show the time picker dialog TimePickerFragment newFragment = new TimePickerFragment(); newFragment.show(getActivity().getSupportFragmentManager(), "timePicker"); } }); return rootView; } public void onTimePicked(Calendar time) { SimpleDateFormat sdfTime = new SimpleDateFormat("HH:mm a"); String strTime = sdfTime.format(time.getTime()); Log.i("onTimePicked >>> ", strTime); // display the selected time in the TextView textTime.setText(DateFormat.format("HH:mm a", time)); } }
MainActivity.java:
public class MainActivity extends SherlockFragmentActivity implements TimePickedListener { // Declare Variables private FragmentTabHost mTabHost; FragmentTab1 fragmentTab1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Set the view from main_fragment.xml setContentView(R.layout.main_fragment); fragmentTab1 = new FragmentTab1(); // Locate android.R.id.tabhost in main_fragment.xml mTabHost = (FragmentTabHost) findViewById(android.R.id.tabhost); // Create the tabs in main_fragment.xml mTabHost.setup(this, getSupportFragmentManager(), R.id.tabcontent); // Create Tab1 with a custom image in res folder mTabHost.addTab(mTabHost.newTabSpec("tab1").setIndicator("", getResources().getDrawable(R.drawable.tab1)), FragmentTab1.class, null); // Create Tab2 mTabHost.addTab(mTabHost.newTabSpec("tab2").setIndicator("Tab2"), FragmentTab2.class, null); // Create Tab3 mTabHost.addTab(mTabHost.newTabSpec("tab3").setIndicator("Tab3"), FragmentTab3.class, null); } @Override public void onTimePicked(Calendar time) { // TODO Auto-generated method stub fragmentTab1.onTimePicked(time); } }
Exception Line:
textTime.setText(DateFormat.format("HH:mm a", time));
New LOG:
02-15 04:18:40.149: D/dalvikvm(1469): GC_FOR_ALLOC freed <1K, 4% free 5141K/5324K, paused 42ms, total 42ms 02-15 04:18:40.349: I/Choreographer(1469): Skipped 126 frames! The application may be doing too much work on its main thread. 02-15 04:18:40.939: I/Choreographer(1469): Skipped 46 frames! The application may be doing too much work on its main thread. 02-15 04:18:49.669: I/onTimePicked >>>(1469): 08:25 AM 02-15 04:18:49.669: D/AndroidRuntime(1469): Shutting down VM 02-15 04:18:49.729: W/dalvikvm(1469): threadid=1: thread exiting with uncaught exception (group=0xb1a94ba8) 02-15 04:18:49.739: E/AndroidRuntime(1469): FATAL EXCEPTION: main 02-15 04:18:49.739: E/AndroidRuntime(1469): Process: com.example.datetimeabs, PID: 1469 02-15 04:18:49.739: E/AndroidRuntime(1469): java.lang.NullPointerException 02-15 04:18:49.739: E/AndroidRuntime(1469): at com.example.datetimeabs.FragmentTab1.onTimePicked(FragmentTab1.java:73) 02-15 04:18:49.739: E/AndroidRuntime(1469): at com.example.datetimeabs.MainActivity.onTimePicked(MainActivity.java:47) 02-15 04:18:49.739: E/AndroidRuntime(1469): at com.example.datetimeabs.TimePickerFragment.onTimeSet(TimePickerFragment.java:52) 02-15 04:18:49.739: E/AndroidRuntime(1469): at android.app.TimePickerDialog.tryNotifyTimeSet(TimePickerDialog.java:130) 02-15 04:18:49.739: E/AndroidRuntime(1469): at android.app.TimePickerDialog.onClick(TimePickerDialog.java:115) 02-15 04:18:49.739: E/AndroidRuntime(1469): at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:166) 02-15 04:18:49.739: E/AndroidRuntime(1469): at android.os.Handler.dispatchMessage(Handler.java:102) 02-15 04:18:49.739: E/AndroidRuntime(1469): at android.os.Looper.loop(Looper.java:136) 02-15 04:18:49.739: E/AndroidRuntime(1469): at android.app.ActivityThread.main(ActivityThread.java:5017) 02-15 04:18:49.739: E/AndroidRuntime(1469): at java.lang.reflect.Method.invokeNative(Native Method) 02-15 04:18:49.739: E/AndroidRuntime(1469): at java.lang.reflect.Method.invoke(Method.java:515) 02-15 04:18:49.739: E/AndroidRuntime(1469): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 02-15 04:18:49.739: E/AndroidRuntime(1469): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 02-15 04:18:49.739: E/AndroidRuntime(1469): at dalvik.system.NativeStart.main(Native Method)
解决方案Implementing TimePicker Dialog in Fragment using DialogFragment and getting ClassCastException
The exception is telling you that
MainActivity
needs to implement theTimePickerFragment$TimePickedListener
interface and provide an implementation of theonTimePicked()
method.New LOG:
That exception appears because you're not properly interacting with your fragments, in the
onTimePicked
callback you call theonTimePicked(time)
of a wrong first fragment tab. That fragment isn't the fragment that theFragmentTabHost
uses for its first tab, it's just a fragment that you manually instantiated(withfragmentTab1 = new FragmentTab1();
). This manually instantiated fragment isn't attached to theActivity
and doesn't have a view because none of its callback were called.To access the proper fragment use the
FragmentManager
to first find it:@Override public void onTimePicked(Calendar time) { FragmentTab1 ft1 = (FragmentTab1) getSupportFragmentManager().findFragmentByTag("tab1"); fragmentTab1.onTimePicked(time); }
这篇关于TextView的NullPointerException异常实施片段TimePicker的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!