gpt4 book ai didi

Android:在 fragment 中使用 ListView 时尚未创建内容 View ?

转载 作者:行者123 更新时间:2023-11-30 03:38:16 26 4
gpt4 key购买 nike

我有两个标签的 fragment ,每个标签都有它各自的 fragment 。每个选项卡都有自己的列表,该列表是从服务器加载的。但是我的应用程序遇到了类似

的异常

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.oj.bs/com.oj.bs.ProjectFragActivity}: java.lang.IllegalStateException: Content view not yet created

我不明白问题出在哪里。谁能告诉我我做错了什么?

以下是我的 fragment 类

public class ResidentialFragActivity extends SherlockListFragment implements ActionBar.TabListener{

ListView listview;
ListView resListviewId;
...
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getActivity().setContentView(R.layout.residential_list);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle saved) {

View view = inflater.inflate(R.layout.residential_list,container, false);
resListviewId = (ListView)view.findViewById(R.id.resProjListView);
projectList = new ArrayList<HashMap<String,String>>();
new LoadProjects().execute();

ListView listview = getListView();
listview.setOnItemClickListener(new android.widget.AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View view, int arg2,
long arg3) {
Intent href = new Intent(getSherlockActivity(), ProjectDetailActivity.class);

String proj_id = ((TextView) view.findViewById(R.id.projectId)).getText().toString();
href.putExtra("proj_id", proj_id);
getSherlockActivity().startActivity(href);
}
});
if (container == null) {
return null;
}
return view;
}

public void onStart() {
super.onStart();
}
@Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
ft.add(android.R.id.content,this,"residential");
ft.attach(this);
}
@Override
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
ft.detach(this);
}
@Override
public void onTabReselected(Tab tab, FragmentTransaction ft) {
}

//inner class for network operation
private class LoadProjects extends AsyncTask<String, String, String> {

@Override
protected String doInBackground(String... params) {
..........
//get data from the latest server
String jsonpProjList = ResdProj.makeHttpReqToSrvr(projectUrl, "POST", projRes);

return null;
}
@Override
protected void onPostExecute(String result) {

getSherlockActivity().runOnUiThread(new Runnable() {

@Override
public void run() {
ListAdapter projAdapter = new SimpleAdapter(getSherlockActivity(),
projectList, R.layout.residential_list_item,
new String[] {PROJ_ID,PROJ_NAME}, new int[]
{R.id.projectId,R.id.projectName});
//updating the UI
setListAdapter(projAdapter);
}
});
}
}

提前致谢

最佳答案

首先,我可以在您的代码中看到很多“坏东西”。我永远不会做的第一件事是 getActivity().setContentView(R.layout.residential_list);。您可以使用 xml 将 Fragments 添加到 FragmentActivity 或直接添加到 FrameLayout。只需查看 Android 中的 Fragments 示例,了解如何实现这一点的最佳实践 Fragments .

第二,不需要在 onPostExecute() 中使用这个 runOnUiThread,因为它已经在 UI 线程上运行了。

我能想到的最后一件事是首先为您的 FragmentActivity 设置内容,将您的选项卡添加到 ActionBar 并将您的 fragment 附加到第一个/第二个选项卡上。之后,您可以使用 AsyncTask 使用数据正确填充 ListView

关于Android:在 fragment 中使用 ListView 时尚未创建内容 View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16274444/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com