大家好,我的代码有问题...我已将 myTask 移至 Splashscreen.java.. 这是 arrivi.java
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View arrivi = inflater.inflate(R.layout.arrivi, container, false);
return arrivi;
}
public void CheckRow(){
ListView list;
rowItems = new ArrayList<RowItem>();
for (int i = 1; i <= thread; i++) {
RowItem item = new RowItem(Compagnia[i], CodiceVolo[i], Citta[i],OraPrevista[i], OraStimata[i], StatoVolo[i]);
rowItems.add(item);
System.out.println(CodiceVolo[i]);
}
list=(ListView)arrivi.findViewById(R.id.listView1);
CustomBaseAdapter adapter = new CustomBaseAdapter(getActivity(), rowItems);
list.setAdapter(adapter);
第 103 行是
list=(ListView)getActivity().findViewById(R.id.listView1);
SplashScreen.java
public class SplashScreen extends Activity {
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.splashscreen);
最佳答案
您应该从 Fragment.getView() 获取布局,而不是使用 getActivity()。
更新
因此,您将在 Activity 的 onCreate 中启动 AsyncTask。 AsyncTask 的 onPostExecute 可以在 Fragment 的 onCreateView 被调用之前被调用,这就是我怀疑这里发生的情况;因此是空指针。一般来说,这些是使用 AsyncTasks 的一些细微差别。
您有多种选择:
- 使用Loaders支持 AsyncTasks
- 从 Fragment 启动 AsyncTask,这保证了 Fragment 已附加并处于 Activity 状态。
- 在 CheckRow 中,在执行工作之前确保 Fragment 处于 Activity 状态。
- 使用保留的 fragment 执行后台处理
结账 this链接以获取更多信息。
关于java - 线程 asynctask 和 listview,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23160635/