2017-02-08 18 views
1

我有一个活动和4个可滑动的选项卡(片段)。例如,我有一个自定义Toast和一个PostResponseAsyncTask在我的Fragment#3中执行,显示加载进度,但是这个Toast和加载进度视图在滑动时也出现在我的Fragment#4和#2中。什么是正确的方法我来处理这个..如何避免在侧面调用onCreateView在标签刷卡上的片段

我是,如果你指导我根据这个例子非常感激

这是片段#3(含面包和执行)

public class A extends Fragment { 
View view ; 

@Nullable 
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    view = inflater.inflate(R.layout.xxx_updates_layout, container, false); 


    PostResponseAsyncTask taskRead = new PostResponseAsyncTask(getActivity(), this); 
    taskRead.execute("http://symphonyrecords.6te.net/product.php"); 

    //Custom Toast 
    LayoutInflater inflaterToast = getActivity().getLayoutInflater(); 
    View layout = inflaterToast.inflate(R.layout.d_toast_d, 
      (ViewGroup) view.findViewById(R.id.toast_layout_root)); 

    ImageView image = (ImageView) layout.findViewById(R.id.image); 
    image.setImageResource(R.drawable.ic_people); 
    TextView text = (TextView) layout.findViewById(R.id.text); 
    text.setText("Ringtone Bank"); 
    Toast toast = new Toast(getActivity().getApplicationContext()); 
    toast.setGravity(Gravity.BOTTOM, 0, 0); 
    toast.setDuration(Toast.LENGTH_SHORT); 
    toast.setView(layout); 
    toast.show(); 


    return view; 
    } //onCreate 
} 

这是片段#4(不希望吐司和执行出现他重)

public class XXXFOUR extends Fragment { 

@Nullable 
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    return inflater.inflate(R.layout.xxx_four,null); 
    } 
} 

这是我viewpager和FragmentPagerAdapter

public class XXXTabFragment extends Fragment { 

public static TabLayout tabLayout; 
public static ViewPager viewPager; 
public static int int_items = 4 ; 

@Nullable 
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

     View x = inflater.inflate(R.layout.xxx_tab_layout,null); 
     tabLayout = (TabLayout) x.findViewById(R.id.tabs); 
     viewPager = (ViewPager) x.findViewById(R.id.viewpager); 


    viewPager.setAdapter(new MyAdapter(getChildFragmentManager())); 



    tabLayout.post(new Runnable() { 
     @Override 
     public void run() { 
       tabLayout.setupWithViewPager(viewPager); 
       } 
    }); 

    return x; 

} 

class MyAdapter extends FragmentPagerAdapter{ 

    public MyAdapter(FragmentManager fm) { 
     super(fm); 
    } 



    @Override 
    public Fragment getItem(int position) 
    { 
     switch (position){ 
      case 0 : return new XXXPrimaryFragment(); 
      case 1 : return new XXXSocialFragment(); 
      case 2 : return new XXXUpdatesFragment(); 
      case 3 : return new XXXFOUR(); 
     } 
    return null; 
    } 

    @Override 
    public int getCount() { 

     return int_items; 

    } 



    @Override 
    public CharSequence getPageTitle(int position) { 

     switch (position){ 
      case 0 : 
       return "Primary"; 
      case 1 : 
       return "Social"; 
      case 2 : 
       return "Updates"; 
      case 3 : 
       return "Four"; 
     } 
      return null; 
     } 
    } 

} 
+0

您是否需要自定义视图才能烤面包?或简单的文字就够了? –

+0

最好是有一个定制的,但它没有必要 –

回答

1

在刷卡标签,这是有这个共同的问题和原因,同时刷卡流畅的性能体验。

我会建议覆盖下面的方法和管理,如果片段是由一个变量可见。

@Override 
public void setUserVisibleHint(boolean isVisibleToUser) { 
    super.setUserVisibleHint(isVisibleToUser); 
    isVisible=true; 
} 

否则将上述所有内容移到一个函数中,并从setUserVisibleHint执行。

+0

,因为我在新的Android如果你能解释一下多一点我会更心存感激 –

+0

请找到这个要点详细答案https://gist.github.com/anonymous/893f3495dd4d2695b16d22473ff6f80c –

+0

我便无法知道如何创建这个(页)变量,并列出我的片段,但我用setUserVisibleHint,并把我的任务里面,并解决了这个问题了,所以再次感谢 –

0

如果只能敬酒文本,您可以使用Snackbar

Snackbar.make(view, "Ringtone Bank", Snackbar.LENGTH_LONG).show(); 

Displaying the Snackbar

吐司有时不会消失,当你的活动本身暂停(当你按下home键)也是,但由于您将SnackbarparentView相加,它只会在当前屏幕上显示。

+0

这是一个很好的建议和我会认真考虑这个(谢谢),但敬酒是我的问题之一,我需要一个主要的解决方案,涵盖整个这样的东西 –

0

试试这个

public class A extends Fragment { 

Toast toast; 

@Override 
public void setUserVisibleHint(boolean isVisibleToUser) { 
    super.setUserVisibleHint(isVisibleToUser); 
    if(!isVisibleToUser){ 
     toast.cancel(); 
    } 
} 
1

在每个片段中使用此

@Override 
    public void setUserVisibleHint(boolean isVisibleToUser) { 
     super.setUserVisibleHint(isVisibleToUser); 
     if (isVisibleToUser) { 
      //Do what to perform such as toast or PostResponseAsyncTask accordingly here. 
     } 
    } 

你也可以设置一个听者使每一个corespponding选项卡中选择时间,只要你想

就会触发功能
tabLayout.setupWithViewPager(viewPager); 
     tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() { 
      @Override 
      public void onTabSelected(TabLayout.Tab tab) { 
       selectedTabPosition = tab.getPosition(); 
       viewPager.setCurrentItem(selectedTabPosition); 
       setList(selectedTabPosition); 
      } 

      @Override 
      public void onTabUnselected(TabLayout.Tab tab) { 
      } 

      @Override 
      public void onTabReselected(TabLayout.Tab tab) { 

      } 


     }); 
相关问题