У меня есть TabActivity, которая имеет две вкладки. Я загружаю отдельную активность в каждой вкладке (активность A & B ). Упражнение A, загруженное на вкладку 1, имеет некоторые элементы управления и ListView . Я использую AsyncTask для загрузки данных из веб-службы для этого ListView . Мне пришлось загрузить другое действие, когда пользователь щелкнул элемент ListView, но это новое действие C должно быть загружено на той же выбранной вкладке.
Я искал в интернете и обнаружил, что могу использовать ActivityGroup ... но в то же время я обнаружил, что он устарел. Поэтому с использованием совместимости android-support-v4 Frangment было предложено ..
Я скачал этот android-support-v4.jar и посмотрел образец FragmentTabs , я понял, как я могу использовать фрагменты даже в Android 2.1 .... так что я заменил две действия , которые я показывал на вкладках, двумя фрагментами
Но сейчас я не знаю, как справиться со следующими ситуациями:
Элементы управления ListView & Other не отображаются при выполнении следующего кода.
мне нужно вызвать AsyncTask ... потребуется время, чтобы получить и проанализировать данные XML с сервера, и onCreateView фрагмента вызывается раньше ... так как я могу установить ListView во фрагменте после вызова onCreateView ?
После щелчка по элементу 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 {
....
....
....
}
Вы можете указать мне на пример.
Ваша помощь очень ценится!