【问题标题】:PagerSlidingStrip is also loading another fragmentPagerSlidingStrip 也在加载另一个片段
【发布时间】:2016-02-23 14:40:16
【问题描述】:

我已经实现了寻呼机滑动条,它工作得很好。

我有 5 个标签,每个标签都包含不同的片段。当我单击第二个选项卡加载相应的片段时,它还会加载第三个片段的详细信息,它显示了我在第三个选项卡的片段中编码的 toast。

这完全破坏了应用程序的性能,我如何解决这个问题我不知道实际发生了什么。

我正在做一个非常大的项目,我无法发布整个代码。

请帮帮我,我会按需发布相应的代码。

问候。

编辑

正在加载另一个片段的通知片段

    ListView notification_listview;
ArrayList<FragmentNotificationDTO> arraylist;
NotificationAdapter adapter;
private static View notificationView;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    if (notificationView != null) {
        ViewGroup parent = (ViewGroup) notificationView.getParent();
        if (parent != null)
            parent.removeView(notificationView);
    }
    notificationView = inflater.inflate(R.layout.fragment_notification,
            container, false);
    initLayout(notificationView);
    loadData();
    return notificationView;
}

private void initLayout(View view) {
    notification_listview = (ListView) view.findViewById(R.id.notification_listview);
    arraylist = new ArrayList<FragmentNotificationDTO>();
    adapter = new NotificationAdapter(mContext, arraylist);
    notification_listview.setAdapter(adapter);

}

这是食物片段,当我们点击通知选项卡时也会加载

  private static View foodlistView;
RelativeLayout rl_foodshare, rl_foodrequested, rl_foodkitchen;
TextView tv_foodshare, tv_foodrequested, tv_foodkitchen;
ImageView img_foodshare, img_foodrequested, img_foodkitchen;
Fragment fr;
FragmentManager fm;
FragmentTransaction fragmentTransaction;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    if (foodlistView != null) {
        ViewGroup parent = (ViewGroup) foodlistView.getParent();
        if (parent != null)
            parent.removeView(foodlistView);
    }
    foodlistView = inflater.inflate(R.layout.fragment_location_list,
            container, false);
    initLayout(foodlistView);
    ChangeFragment(1);
    return foodlistView;
}

MainActivity.java 包含 PagerSlidingStrip & View Pager

 @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    ViewPager viewPager = (ViewPager) findViewById(R.id.viewpager);
    viewPager.setAdapter(new FragmentPagerAdapter(getSupportFragmentManager()));

    PagerSlidingTabStrip PGSTRIP = (PagerSlidingTabStrip) findViewById(R.id.tabs);
    PGSTRIP.setViewPager(viewPager);
    viewPager.setOffscreenPageLimit(0);
}

【问题讨论】:

  • 检查您是否在多个片段中具有任何具有相同名称的视图的任何实例。我昨天遇到了类似的问题,就是这个问题。
  • @ParsaniaHardik 让我检查一下
  • @ParsaniaHardik 检查了所有片段,它完全没问题。如果我错过了上面发布的代码,请检查并解释我是否有任何问题
  • 这是设计使然 - 查看寻呼机提前加载标签
  • 它将所有标签保存在内存中,您只需要在开始时加载它们一次。还要检查this

标签: android android-fragments pagerslidingtabstrip


【解决方案1】:

我解决了我的问题,方法是在我的每个片段中重写此方法,然后在片段对用户的可见性为真时调用加载方法。

    @Override
public void setUserVisibleHint(boolean isVisibleToUser) {
    super.setUserVisibleHint(isVisibleToUser);
    if (isVisibleToUser) {
        // load data here
    }else{
        // fragment is no longer visible
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多