JakeWhartonのViewPagerIndicatorサンプルを試してみます。そして私のアプリはそのようなものです:
次のように開始するときのActivity1:
|------------------------
|Page1 Page2 Page3 Pa|
|-------_____-----------|
| |
| |
| fragment 2 |
| |
| |
ここではPage2が選択されています。タブページのタイトルがテーブルの行から動的に読み込まれました。例Acitivity2を起動して、Acitivity1のタブページを追加します。しかし、私はここで問題を抱えています。タブページのタイトルが正常に読み込まれ、フラグメントが正しく読み込まれていません。このような:
|------------------------
|Page0 Page1 Page2 Pa|
|_____------------------|
| |
| |
| fragment 1 |
| |
| |
mAdapter.notifyDataSetChanged()を試しましたが、期待した結果が得られませんでした。私の問題を解決する方法は?抽出すると、タブページを選択したときにフラグメントで正しいデータをフェッチしません。サンプル:タブPage0を選択します。すべてのデータはfragment0である必要があります。ここでは、fragment1です。
これが私のコードです
public class WeatherActivity extends FragmentActivity {
Cursor cursor, cursor2,cursorMyLocation;
SQLiteDatabase dh;
LocationsCustomCursorAdapter myCursorAdapter;
static int hasMyLocation;
String strLocation;
ArrayList<String> arrayLocations;
static ArrayList<String> arrayLocationReq;
LocationsTabsFragmentAdapter mAdapter;
ViewPager mPager;
PageIndicator mIndicator;
TabPageIndicator mTabPage;
static String[] CONTENT;
static String[] CONTENT2;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
AndroidContext.setContext(this);
dh=DatabaseHelper.getInstance().getDb();
getLocation();
setContentView(R.layout.activity_weather);
mAdapter = new MyLocationsTabsAdapter(getSupportFragmentManager());
mPager = (ViewPager)findViewById(R.id.viewPager);
mPager.setAdapter(mAdapter);
mIndicator = (TabPageIndicator)findViewById(R.id.indicator);
mIndicator.setViewPager(mPager);
}
class MyLocationsTabsAdapter extends LocationsTabsFragmentAdapter {
public MyLocationsTabsAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
return LocationsTabsFragment.newInstance(WeatherActivity.CONTENT2[position % WeatherActivity.CONTENT2.length]);
}
@Override
public int getCount() {
return WeatherActivity.CONTENT.length;
}
@Override
public CharSequence getPageTitle(int position) {
return WeatherActivity.CONTENT[position % WeatherActivity.CONTENT.length];
}
}
// NOTE: String[] CONTENT,CONTENT2 = getLocation();
public void getLocation (){
...
}
// Method mAdapter.notifyDataSetChanged() not working.
// Only mIndicator.notifyDataSetChanged() work fine.
@Override
protected void onActivityResult(int arg0, int arg1, Intent arg2) {
// TODO Auto-generated method stub
super.onActivityResult(arg0, arg1, arg2);
if(arg0==2){
getLocation();
mIndicator.notifyDataSetChanged();
mAdapter.notifyDataSetChanged();
}
}
}
と:
public class LocationsTabsFragment extends Fragment {
private String mContent = "";
private static final String KEY_CONTENT = "LocationsTabsFragment:Content";
public static LocationsTabsFragment newInstance(String location) {
LocationsTabsFragment fragment = new LocationsTabsFragment();
StringBuilder builder = new StringBuilder();
builder.append(location);
fragment.mContent = builder.toString();
return fragment;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if ((savedInstanceState != null) && savedInstanceState.containsKey(KEY_CONTENT)) {
mContent = savedInstanceState.getString(KEY_CONTENT);
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
new GetWeather().execute();
v = inflater.inflate(R.layout.weather, container, false);
return v;
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putString(KEY_CONTENT, mContent);
}
// working with server and fetch data on fragment.
public class GetWeather extends AsyncTask<Void, Boolean, Weather>{
}
}