Android 当TabPage更改时重新加载片段

Android 当TabPage更改时重新加载片段,android,android-fragments,Android,Android Fragments,我试一下样品。 我的应用程序是这样的: 活动1启动时,如: |------------------------ |Page1 Page2 Page3 Pa| |-------_____-----------| | | | | | fragment 2 | | | | | 此处选择第2页。 Ta

我试一下样品。 我的应用程序是这样的:

活动1启动时,如:

|------------------------
|Page1  Page2  Page3  Pa|
|-------_____-----------|
|                       |
|                       |
|     fragment 2        |
|                       |
|                       |
此处选择第2页。 Tabpage标题已从表行动态加载。 示例I启动Acitivity2为Acitivity1添加更多选项卡页。但我这里有个问题。 Tabpage标题加载良好,片段加载不正确。这就像:

|------------------------
|Page0  Page1  Page2  Pa|
|_____------------------|
|                       |
|                       |
|     fragment 1        |
|                       |
|                       |
我尝试了mAdapter.notifyDataSetChanged(),但没有得到预期的结果。 如何解决我的问题? 简而言之,当选择tabpage时,它无法在片段上正确获取数据。示例:选择选项卡第0页,所有数据必须是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();

        }
    }  
}
公共类WeatherActivity扩展了FragmentActivity{
游标游标,游标2,游标位置;
sqlitedh数据库;
地点:斯库斯托姆库索适配器myCursorAdapter;
静态定位;
字符串定位;
阵列列表阵列位置;
静态ArrayList arrayLocationReq;
位置稳定碎片适配器;
可视寻呼机;
页面指示器指示器;
TabPageIndicator-mTabPage;
静态字符串[]内容;
静态字符串[]CONTENT2;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContext(this);
dh=DatabaseHelper.getInstance().getDb();
getLocation();
setContentView(右布局、活动和天气);
mAdapter=新的MyLocationsTabsAdapter(getSupportFragmentManager());
mPager=(ViewPager)findViewById(R.id.ViewPager);
mPager.setAdapter(mAdapter);
mIndicator=(TabPageIndicator)findViewById(R.id.indicator);
mIndicator.setViewPager(mPager);
}
类MyLocationsTabsAdapter扩展LocationsTabsFragmentAdapter{
公共MyLocationsTabsAdapter(碎片管理器fm){
超级(fm);
}
@凌驾
公共片段getItem(int位置){
返回LocationsTabsFragment.newInstance(WeatherActivity.CONTENT2[位置%WeatherActivity.CONTENT2.length]);
}
@凌驾
public int getCount(){
返回WeatherActivity.CONTENT.length;
}
@凌驾
公共字符序列getPageTitle(int位置){
返回WeatherActivity.CONTENT[位置%WeatherActivity.CONTENT.length];
}
}
//注意:字符串[]内容,CONTENT2=getLocation();
公共位置(){
...
}
//方法mAdapter.notifyDataSetChanged()不工作。
//只有mIndicator.notifyDataSetChanged()可以正常工作。
@凌驾
ActivityResult上的受保护无效(int arg0、int arg1、Intent arg2){
//TODO自动生成的方法存根
super.onActivityResult(arg0、arg1、arg2);
如果(arg0==2){
getLocation();
mIndicator.notifyDataSetChanged();
mAdapter.notifyDataSetChanged();
}
}  
}
以及:

公共类LocationsTabsFragment扩展片段{
私有字符串mContent=“”;
私有静态最终字符串键\u CONTENT=“LocationsTabsFragment:CONTENT”;
公共静态位置StabsFragment newInstance(字符串位置){
LocationsTabsFragment片段=新LocationsTabsFragment();
StringBuilder=新的StringBuilder();
附加(位置);
fragment.mContent=builder.toString();
返回片段;
}
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
if((savedInstanceState!=null)&&savedInstanceState.containsKey(键内容)){
mContent=savedInstanceState.getString(键内容);
}
}
@凌驾
CreateView上的公共视图(布局、充气机、视图组容器、捆绑包保存状态){
新建GetWeather().execute();
v=充气机。充气(R.布局、天气、容器、假);
返回v;
}
@凌驾
SaveInstanceState上的公共无效(束超出状态){
super.onSaveInstanceState(超出状态);
outState.putString(KEY_CONTENT,mContent);
}
//使用服务器并获取片段上的数据。
公共类GetWeather扩展异步任务{
}
}

Tel me our correct requirements.........当选择选项卡Page0->fragment 0而不是fragment 1时,不清楚您在上面给出了什么。
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>{
    }

}