Java 片段类中的错误
所以我正在转换我的应用程序,在大量的研究之后,我决定将我的活动转换成片段。这是一个成功,但现在更难的是,实现从我的活动到片段的代码。所以我使用了getView()。和getActivity()。解决问题,一切都很好。正如你在下面看到的Java 片段类中的错误,java,android,eclipse,class,android-fragments,Java,Android,Eclipse,Class,Android Fragments,所以我正在转换我的应用程序,在大量的研究之后,我决定将我的活动转换成片段。这是一个成功,但现在更难的是,实现从我的活动到片段的代码。所以我使用了getView()。和getActivity()。解决问题,一切都很好。正如你在下面看到的 public class HomeFragment extends Fragment { public static HomeFragment newInstance(String title) { HomeFragment homeFra
public class HomeFragment extends Fragment {
public static HomeFragment newInstance(String title) {
HomeFragment homeFragment = new HomeFragment();
Bundle bundle = new Bundle();
bundle.putString("title", title);
homeFragment.setArguments(bundle);
return homeFragment;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_activity_home, container, false);
// Time function - Displays timeview on Card
final boolean keepRunning = true;
Thread thread = new Thread(){
@Override
public void run(){
while(keepRunning){
// Make the thread wait half a second (if you're only showing time up to seconds, it doesn't need to be updating constantly)
try {
Thread.sleep(500);
} catch (InterruptedException e) {
Toast.makeText(getActivity().getApplicationContext(), "Default Signature Fail", Toast.LENGTH_LONG).show();
e.printStackTrace();
}
getActivity().runOnUiThread(new Runnable(){
@Override
public void run(){
TextView time = (TextView) getView().findViewById(R.id.time);
time.setText(DateUtils.formatDateTime(getActivity().getBaseContext(), System.currentTimeMillis(),DateUtils.FORMAT_SHOW_TIME | DateUtils.FORMAT_12HOUR));
}
});
}
}
};
thread.start();
// Date function - Displays dateview on Card
final boolean keepRunning1 = true;
Thread thread_two = new Thread(){
@Override
public void run(){
while(keepRunning1){
// Make the thread wait half a second. If you want...
try {
Thread.sleep(500);
} catch (InterruptedException e) {
Toast.makeText(getActivity().getApplicationContext(), "Default Signature Fail", Toast.LENGTH_LONG).show();
e.printStackTrace();
}
getActivity().runOnUiThread(new Runnable(){
@Override
public void run(){
TextView date = (TextView) getView().findViewById(R.id.date);
date.setText(DateUtils.formatDateTime(getActivity().getBaseContext(), System.currentTimeMillis(),DateUtils.FORMAT_SHOW_WEEKDAY | DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_SHOW_YEAR));
}
});
}
}
};
thread_two.start();
return view;
}
}
运行应用程序时,它会显示应用程序约2秒钟,然后强制关闭,因此我检查了日志中是否有任何错误。这就出现了--
我是一个新手,我有更多的活动经验,所以我不知道这里有什么问题。所以我查了54行,就是这一行--
但是我没有看到任何问题或错误?我有什么遗漏吗?
谢谢你阅读这篇文章 改变这个
TextView time = (TextView) getView().findViewById(R.id.time);
到
最后一次
final View view;
同样地
TextView date = (TextView) view.findViewById(R.id.date);
试试这个
改变这个
TextView time = (TextView) getView().findViewById(R.id.time);
time.setText(DateUtils.formatDateTime(getActivity().getBaseContext(), System.currentTimeMillis(),DateUtils.FORMAT_SHOW_TIME | DateUtils.FORMAT_12HOUR));
到
而且
TextView date = (TextView) view.findViewById(R.id.date);
date.setText(""+DateUtils.formatDateTime(getActivity().getBaseContext(), System.currentTimeMillis(),DateUtils.FORMAT_SHOW_WEEKDAY | DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_SHOW_YEAR));
您正在使用线程创建交易?@Robin
getView()
返回null。您可以使用getView()
在activitycreated上初始化视图。您需要等待片段连接到activity@Robin首先确定时间,然后再次运行,查看是否获得NPE@date。我想你会的。还可以使用线程的处理程序isntead来创建延迟
TextView date = (TextView) view.findViewById(R.id.date);
TextView time = (TextView) getView().findViewById(R.id.time);
time.setText(DateUtils.formatDateTime(getActivity().getBaseContext(), System.currentTimeMillis(),DateUtils.FORMAT_SHOW_TIME | DateUtils.FORMAT_12HOUR));
TextView time = (TextView) view.findViewById(R.id.time);
time.setText(""+DateUtils.formatDateTime(getActivity().getBaseContext(), System.currentTimeMillis(),DateUtils.FORMAT_SHOW_TIME | DateUtils.FORMAT_12HOUR));
TextView date = (TextView) view.findViewById(R.id.date);
date.setText(""+DateUtils.formatDateTime(getActivity().getBaseContext(), System.currentTimeMillis(),DateUtils.FORMAT_SHOW_WEEKDAY | DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_SHOW_YEAR));