【发布时间】:2015-05-21 08:41:56
【问题描述】:
过去 1 天我一直在摸索,但找不到解决方案。 在我的应用程序中,工具栏下有两个选项卡
- 第一个标签是 USER-TAB
- 第二个是ADMIN-TAB
在两个选项卡中都有 listView。当单击 USER-TAB 上的 ListItem 时,会出现一个对话框并且用户采取一些操作。
现在在选择“管理”选项卡后,管理员应使用新的数据集刷新。但事实并非如此。在选择 ADMIN-TAB 时,onResume() 方法和everyting 都会被调用,但它无法更新列表。
我将无法编写整个代码,我给出了一些 sn-p。
基本上我已经从这个链接中获取了代码
https://github.com/codepath/android_guides/wiki/Sliding-Tabs-with-PagerSlidingTabStrip
在我的主要活动中,我编写了 OpPageChangeListener。
public class MaterialTab extends FragmentActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.material_main_sample);
// Get the ViewPager and set it's PagerAdapter so that it can display items
ViewPager viewPager = (ViewPager) findViewById(R.id.viewpager);
viewPager.setAdapter(new SampleFragmentPagerAdapter(getSupportFragmentManager()));
// Give the PagerSlidingTabStrip the ViewPager
PagerSlidingTabStrip tabsStrip = (PagerSlidingTabStrip) findViewById(R.id.tabs);
// Attach the view pager to the tab strip
tabsStrip.setViewPager(viewPager);
tabsStrip.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
if(position == 0){
MileUserFragment userFragment = new MileUserFragment();
final FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.detach(userFragment);
ft.attach(userFragment);
ft.commit();
} if(position == 1){
MileAdminFragment adminFragment = new MileAdminFragment();
final FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.detach(adminFragment);
ft.attach(adminFragment);
ft.commit();
}
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
}
}
OnPageSelected 您可以看到我正在分离并重新附加片段。一切正常。两个 Fragments OnResume() 都被调用,但列表没有改变。我不明白为什么
为了获得更多帮助,我将添加 sn-p 一个片段。希望这会给我一些想法,我可能会出错
public class MileUserFragment extends Fragment {
@Override
public void onResume() {
super.onResume();
new GetAdminDbTask().execute();
if(!internetUtil.isConnectedToInternet(getActivity())){
mSwipeRefreshLayout.setRefreshing(false);
mSwipeRefreshLayout.setEnabled(false);
}
}
public class GetAdminDbTask extends AsyncTask<Admin, Void, String> {
@Override
protected String doInBackground(Admin... parmas) {
_adminList = shipmentDbHandler.getAllAdmin();
return "";
}
@Override
protected void onPostExecute(String str) {
mAdminAdapter = new AdminAdapter(getActivity(), _adminList);
adminListView.setAdapter(mAdminAdapter);
mAdminAdapter.notifyDataSetChanged();
// Set the refresh Listener to false after the list has been loaded with new set of data
if (mSwipeRefreshLayout.isRefreshing()) {
mSwipeRefreshLayout.setRefreshing(false);
}
if(_adminList.size() > 0 ){
mAdminAdapter = new AdminAdapter(getActivity(), _adminList);
adminListView.setAdapter(mAdminAdapter);
mAdminAdapter.notifyDataSetChanged();
}
}
}
}
public class SampleFragmentPagerAdapter extends FragmentPagerAdapter {
final int PAGE_COUNT = 2;
private String tabTitles[] = new String[] { "Tab1", "Tab2" };
private FragmentManager fragmentManager;
public SampleFragmentPagerAdapter(FragmentManager fm) {
super(fm);
this.fragmentManager = fm;
}
@Override
public int getCount() {
return PAGE_COUNT;
}
@Override
public Fragment getItem(int position) {
FragmentTransaction ft = null;
if(position == 0){
MileUserFragment userFragment = new MileUserFragment();
return userFragment;
}
if(position == 1){
MileAdminFragment adminFragment = new MileAdminFragment();
return archiveFragment;
}
}
@Override
public CharSequence getPageTitle(int position) {
// Generate title based on item position
return tabTitles[position];
}
}
【问题讨论】:
-
我相信像你这样使用
attach和detach是不正确的。您正在寻找的是replace方法。 -
@curtisLoew .. 这是我在网上找到的最接近的方法,否则在它甚至没有调用 onResume 之前。对于替换部分,我需要用标签设置片段..我不知道该怎么做
标签: android tabs android-viewpager fragment pagerslidingtabstrip