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