2017-02-07 2 views
1

私はFragment(タブスワイプのもの)が4つあります。たとえば、私は#2にToastを作成しましたが、このトーストは私が開いたときに私のFragment#4にも現れます。 ここには何が欠けていますか?フラグメントは他のフラグメントへのビューを返す

これは私のフラグメント#2

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); 

    //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 XXXSentFragment extends Fragment { 

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

マイ・フラグメントページャアダプタ

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; 
     } 
    } 

} 

答えて

1

ビューページは3つのフラグメントを一度に読み込みます(表示されているもの、左側にあるもの、右側にあるもの)。したがって、それらのすべてのonCreateViewが一度に呼び出され、別のフラグメントのトーストが表示されます。これを確認し、この動作の仕組みをよりよく理解するために、すべてのフラグメントのonCreateViewにログステートメントを入れます。

ユーザーが特定のフラグメントをスワイプまたは選択したときにトーストを表示する場合(あなたのケースではXXXUpdatesFragment())、これについての1つの方法は、FragmentPagerAdapterでフラグメントへの参照を保持してからページが2に変更されたときに、viewPagerのonPageChangeListenerは、参照を使用してトーストを示すXXXUpdatesFragment()内のメソッドを呼び出します。

public class XXXUpdatesFragment 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); 


    return view; 
    } 

    public void showToast() { 
    //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(); 
    } 
} 
+0

あなたは私がはるかに感謝される例に私をリダイレクトすることができれば、私はアンドロイドに新しいですので、これは完全な説明です..しかし.. – Mehran

+0

、私はあなたにこのための例を取得する方法について確認していません。あなたの進歩と何を試しているかを教えてください。私はあなたを助けることができます。 –

+0

Jaisonさん、ありがとう、私はsetUserVisibleHintで解決しました – Mehran

関連する問題