У меня есть FragmentActivity
, который отображает android.support.v4.app.FragmentTabHost
. Вкладки будут иметь тип ListFragment
. Фрагменты ListFragment
будут иметь ArrayAdapter
, которые используют AyncTask
для получения данных из веб-службы. Проблема возникает, когда мне нужно обновить данные в ArrayAdapter
. Кажется, я не могу получить ссылку на вкладку ListFragment
, чтобы получить ссылку на адаптер и обновить данные. Я хотел бы иметь обновление ListFragment
в методе onPostExecute
AysncTask
. Заранее спасибо.Retrieve ListFragment от FragmentTabHost
MyFragmentActivity:
public class MyFragmentActivity extends FragmentActivity {
private FragmentTabHost fTabHost;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.myLayout);
fTabHost = (FragmentTabHost) findViewById(android.R.id.tabhost);
fTabHost.setup(this, getSupportFragmentManager(), R.id.realtabcontent);
// Add Nearby Places
fTabHost.addTab(fTabHost.newTabSpec("nearby").setIndicator("Nearby"),NearbyFragment.class, null);
fTabHost.setCurrentTab(0);
}
@Override
protected void onStart() {
super.onStart();
new RetrievePlacesTask().execute(new PlacesAPIClient().getNearbyPlaces());
}
private class RetrievePlacesTask extends AsyncTask<String, Void, PlacesAPIResults> {
public RetrievePlacesTask() {
super();
}
// Other methods ....
protected void onPostExecute(PlacesAPIResults results) {
FragmentManager fragmentManager = getSupportFragmentManager();
// This returns null, I believe because it FragmentTabHost is a View not a Fragment
Fragment tabhost = fragmentManager.findFragmentById(android.R.id.tabhost);
FragmentManager childManager = tabhost.getChildFragmentManager();
ListFragment nearbyListFragment = (ListFragment) childManager.findFragmentByTag("nearby");
// Get adapter and update data
}
}
}
myLayout.xml:
<android.support.v4.app.FragmentTabHost
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/tabhost"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TabWidget
android:id="@android:id/tabs"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="0" />
<FrameLayout
android:id="@android:id/tabcontent"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_weight="0" />
<FrameLayout
android:id="@+id/realtabcontent"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1" />
</LinearLayout>
NearbyFrag Мент (ListFragment)
public class NearbyFragment extends ListFragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
PlaceArrayAdapter adapter = new PlaceArrayAdapter(inflater.getContext(),R.layout.place_list_item, new ArrayList<Place>());
setListAdapter(adapter);
return super.onCreateView(inflater, container, savedInstanceState);
}
}