在过去的几天里,我一直试图从当前的listactivity转到listfragment。我通过一个运行良好的ArrayAdapter将数据加载到我的Listactivity中。首先从远程服务器收集数据,然后将其插入SQLite数据库。显示数据时,我将数据加载到自定义BaseAdapter中。所有这一切都很棒。我真的想通过使用listfragments来更新我的UI。这尤其是因为我有很多客户使用平板电脑。
我知道如何为平板电脑创建更大的视图,但希望我的应用能够像在iPad中一样呈现。据我所知,可以用片段来做到这一点。到目前为止,我已经设法让listfragments使用静态数据。问题是我不知道如何将数组适配器中存在的数据加载到listfragment中。
我使用异步任务来检索,存储和显示列表视图中的数据。
有人可以帮我将异步任务中的数据加载到listfragment中吗?目前,我将所有内容加载到listactivity中的列表视图中。
由于
答案 0 :(得分:4)
以下是基本情景的分步指南:
1)创建一个新的fragment.java文件,其中包含片段的超级简单实现。
package com.a;
import android.os.Bundle;
import android.support.v4.app.ListFragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ListView;
public class MenuFragment extends ListFragment
{
public static final String TAG = "MenuFragment";
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
v = inflater.inflate(R.layout.list, null);
return v;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
//
// insert code here to setup and call setListAdapter()
//
}
@Override
public void onListItemClick(ListView lv, View v, int position, long id)
{
}
}
2)在listactivity代码中查找你的setContentView,使用该布局作为onCreateView()下inflate()调用的参数
setContentView(R.layout.main);
到
View v = inflater.inflate(R.layout.main, null);
3)将您的listactivity onCreate()下的其余代码移动到listfragmentt OnCreateView()。您可能有一些代码设置控件,如下所示:
text = (EditText) this.findViewById(R.id.text);
它将成为这个:
text = (EditText) v.findViewById(R.id.text);
请注意,v是从膨胀调用返回的视图。
4)如果您的代码引用了“this”,您将收到错误消息。将其替换为“getActivity()”。
5)检查您剩下的代码,找到将它们放入新文件的正确位置。希望以上内容涵盖了基础知识。
答案 1 :(得分:1)
基本上它必须是相同的。只是容器不同(Activity to Fragment),理想情况下内部实现应保持不变。所以我会说创建AsyncTask使用相同的组件,在onPostExecute()方法中,你可以做一个setListAdapter(适配器),如下所示:
class MyFragment extentsListFragment{
//define constructors if any
public void onResume(){
LoadData loadData = new LoadData();
loadData.execute();
}
//unimplementedMethods
private class LoadData extends AsyncTask<Void, Void, Void> {
private Object object = null;
protected Void doInBackground(Void... params) {
//make a call to the server and save the data in SQLite DB
// Make a call to the database to get your data
object = getObjectFromDB();
return null;
}
protected void onPostExecute(Void result) {
if(object == null || object.length <= 0) {
setListAdapter(null);
return;
}
// assuming object has your data, say it's an Array List, work on it and setListAdapter
adapter = ...
setListAdapter(adapter)
}
private Object getObjectFromDB() {
// do whatever
return object;
}
}
}