2017-04-01 7 views
0

세 개의 탭이있는 탐색 모음이 각 탭에있는 조각입니다. 내 두 번째 조각의 onCreateView 방법이 토스트 메시지를 썼다 : 내가 원하는 것은두 번째 탭을 클릭 할 때만이 토스트 메시지를 어떻게 표시합니까?

public class SecondFragment extends Fragment{ 

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


     Toast.makeText(getContext(), "Test", Toast.LENGTH_LONG).show(); 

     return rootView; 
    } 

그 나는이 탭에게 메시지가 표시를 클릭하는 경우에만. 그러나 문제는 응용 프로그램을 시작하면 메시지가 직접 표시되지만 그 이유는 무엇입니까?

public class MainActivity extends AppCompatActivity{ 
    NavigationView mNavigationView; 
    FragmentManager mFragmentManager; 
    FragmentTransaction mFragmentTransaction; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 


     /** 
     *Setup the DrawerLayout and NavigationView 
     */ 

     mNavigationView = (NavigationView) findViewById(R.id.shitstuff) ; 

     /** 
     * Lets inflate the very first fragment 
     * Here , we are inflating the TabFragment as the first Fragment 
     */ 

     mFragmentManager = getSupportFragmentManager(); 
     mFragmentTransaction = mFragmentManager.beginTransaction(); 
     mFragmentTransaction.replace(R.id.containerView,new TabFragment()).commit(); 

    } 


} 

그리고 (I는이 질문에 대해 중요하다고 생각) 내 TabFragment : 여기

내 MainActivity.java입니다

public class TabFragment extends Fragment { 
    public static TabLayout tabLayout; 
    public static ViewPager viewPager; 
    public static int int_items = 3 ; 

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



     /** 
     *Inflate tab_layout and setup Views. 
     */ 
      View x = inflater.inflate(R.layout.tab_layout,null); 
      tabLayout = (TabLayout) x.findViewById(R.id.tabs); 
      viewPager = (ViewPager) x.findViewById(R.id.viewpager); 

     /** 
     *Set an Apater for the View Pager 
     */ 
     viewPager.setAdapter(new MyAdapter(getChildFragmentManager())); 

     /** 
     * Now , this is a workaround , 
     * The setupWithViewPager dose't works without the runnable . 
     * Maybe a Support Library Bug . 
     */ 

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

     return x; 

    } 

    class MyAdapter extends FragmentPagerAdapter { 

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

     /** 
     * Return fragment with respect to Position . 
     */ 

     @Override 
     public Fragment getItem(int position) 
     { 

      if(position == 0){ 
       return new FirstFragment(); 
      } 
      if(position == 1){ 
       return new SecondFragment(); 
      } 
      if(position == 2){ 
       return new ThirdFragment(); 
      } 

     return null; 
     } 

     @Override 
     public int getCount() { 

      return int_items; 

     } 

     /** 
     * This method returns the title of the tab according to the position. 
     */ 

     @Override 
     public CharSequence getPageTitle(int position) { 

      switch (position){ 
       case 0 : 
        return "First"; 
       case 1 : 
        return "Second"; 
       case 2 : 
        return "Third"; 
      } 
       return null; 
     } 
    } 

} 

그래서 어디를 표시 Toast.makeText(getContext(), "Test", Toast.LENGTH_LONG).show(); 말을해야합니까 두 번째 탭을 눌러야합니까?

답변

0

다른 조각을 클릭 할 때 보이지 않도록 표시된 토스트를 종료하는 코드를 사용할 수 있습니다.

이 하나

toast = new Toast(getContext()); 
toast.cancel(); //this will prevent toast from displaying multiple times 

그것이

+0

나는 토스트 예제를 가지고이 질문을했다. 하지만 실제로 두 번째 탭을 클릭 할 때 삽입 광고를 표시하려고합니다. 따라서이 행을 어디에 쓸 것인지 알아야합니다. –

0

가 대기 작동 희망하십시오! 여러 개의 탭이있는 경우 각 탭마다 개별 조각을 포함해야하며 각 조각마다 자바 클래스와 레이아웃 파일이 동일해야합니다. 코딩 부분은 Java 파일의 onCreate 메소드 내부에 있고 xml/layout 부분은 .xml에 있습니다. 파일 그게 다야.