【发布时间】:2012-03-31 05:48:31
【问题描述】:
我有一个 TabActivity,它有两个标签。我在每个选项卡中加载单独的活动(活动 A 和 B)。在选项卡 1 中加载的 Activity A 具有 一些控件 和一个 ListView。我使用 AsyncTask 从该 ListView 的 Web 服务加载数据。当用户单击 ListView 项目时,我必须加载另一个活动,但新的活动 C 应该加载到同一个选定的选项卡中。
我在互联网上搜索,发现我可以使用 ActivityGroup ...但同时,我发现它已被弃用。于是提出了使用android-support-v4兼容性片段..
我下载了 android-support-v4.jar 并查看了 FragmentTabs 示例,我知道了如何在 Android 2.1 中使用 Fragments....所以我用两个 Fragments
替换了我在标签中显示的两个 Activity但现在我不知道如何处理以下情况:
当我运行以下代码时,ListView 和其他控件不显示。
我必须调用 AsyncTask ...从服务器获取和解析 XML 数据需要时间,而且 Fragment 的 onCreateView 更早被调用 ...所以我该如何设置 onCreateView 后片段中的strong>ListView?
单击 ListView 项目后,我将不得不在同一个 选项卡 中加载另一个片段 C ...我该如何实现?
我的片段代码如下:
public class UpdatesFragment extends Fragment implements IFeedReceiver {
ArrayList<Feed> _feeds;
Integer _currentPage = 1;
ListView _lvUpdates;
UserMessage _userMessage;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getFeeds();
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.updates, container, false);
this._lvUpdates = (ListView)v.findViewById(R.id.listUpdates);
return v;
}
private void getFeeds() {
FeedsCollectorAsyncTask task = new FeedsCollectorAsyncTask(
getActivity(), this._currentPage);
task.execute();
}
//This method is called from AsyncTask upon receiving & parsing data. So i m trying to populate my ListView here
@Override
public void onFeedReceived(ArrayList<Feed> feeds) {
FeedsAdapter adapter = new FeedsAdapter(getActivity(),
R.layout.feed_list_item, this._feeds);
this._lvUpdates.setAdapter(adapter);
// Load detail on item click
this._lvUpdates.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int index,
long id) {
}
});
}
}
主选项卡活动 XML 如下。
<?xml version="1.0" encoding="utf-8"?>
<TabHost xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/tabhost"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<LinearLayout
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:padding="5dp">
<FrameLayout
android:id="@android:id/tabcontent"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_weight="0"/>
<FrameLayout
android:id="@+android:id/realtabcontent"
android:layout_width="fill_parent"
android:layout_height="0dp"
android:layout_weight="1"/>
<TabWidget
android:id="@android:id/tabs"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="-6dp"/>
</LinearLayout>
最后……
public class PlayMakerActivity extends FragmentActivity {
/** Called when the activity is first created. */
TabHost tabHost;
TabManager mTabManager;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Resources res = getResources(); // Resource object to get Drawables
// TabHost tabHost = getTabHost(); // The activity TabHost
tabHost = (TabHost) findViewById(android.R.id.tabhost);
tabHost.setup();
mTabManager = new TabManager(this, tabHost, R.id.realtabcontent);
mTabManager.addTab(tabHost.newTabSpec("Upudates").setIndicator("Updates"),
UpdatesFragment.class, null);
}
}
//also included the following AS It IS
public static class TabManager implements TabHost.OnTabChangeListener {
....
....
....
}
你可以给我举个例子。 非常感谢您的帮助!
【问题讨论】:
标签: android android-asynctask android-fragments android-tabhost