选项卡片段按钮单击将数据发送到多个选项卡 [英] Tab Fragment Button Click send data to more than one tabFragment

查看:61
本文介绍了选项卡片段按钮单击将数据发送到多个选项卡的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有三个制表符片段TAB1,TAB2和TAB3.在TAB1上有一个按钮,当单击该按钮时,它必须使用界面将数据发送到TAB2和TAB3,并在相应片段的textView中显示数据.到目前为止,我已经设法将TAB1发送到TAB2,如下所示:

 //  interface  codes
  public interface IFragmentToActivity {
  void Tab1ToTab2(String value);
 }

 //  in activity 

    @Override
  public void Tab1ToTab2(String value) {
TabFragment2 fragment = (TabFragment2) adapter.getFragment(1);
if (fragment != null) {
    fragment.fragmentCommunicationFragment(value);
} else {
    // Log.i(LOG_TAG, "Fragment 2 is not initialized");
}
   }


  ///   in TAB1 i send data

          @Override
public void onClick(View v) {
    switch (v.getId()) {
        case R.id.button2:
            mCallback.FragmentToFragment("hi from tab 1");
            break;
             }
                   }

我如何使它适用于所有片段?这就是我想发送到TAB2和3时尝试过的方法.

界面代码

public interface IFragmentToActivity {
void Tab1ToTab2(String value);
void Tab1ToTab3(String value);
     }

TAB1发送数据

    @Override
      public void onClick(View v) {
    switch (v.getId()) {
        case R.id.button2:
            mCallback.Tab1ToTab2("hi from tab 1");
            mCallback.Tab1ToTab3(hi from tab 1");
            break;
    }

主要活动中的代码以接收

       @Override
        public void Tab1ToTab2(String value) {
    TabFragment2 fragment = (TabFragment2) adapter.getFragment(1);
    if (fragment != null) {
        fragment.fragmentCommunicationFragment(value);
    } else {
        // Log.i(LOG_TAG, "Fragment 2 is not initialized");
    }
}

@Override
public void Tab1ToTab3(String value) {
    TabFragment3 fragment = (TabFragment3) adapter.getFragment(1);
    if (fragment != null) {
        fragment.FromFragmentOne(value);
    }

    else {
        // Log.i(LOG_TAG, "Fragment 3 is not initialized");
    }
}

///TAB 2方法接收数据

  public void fragmentCommunicationFragment(String value){
      mTextView1.setText(value);
      }

///TAB 3方法接收数据

   public void FromFragmentOne(String kabila){
    mTextView1.setText(kabila);
}

//适配器

 public class PagerAdapter extends FragmentStatePagerAdapter {
private final SparseArray<WeakReference<Fragment>> instantiatedFragments = new SparseArray<>();
private ArrayList<String> mTabHeader;
int mNumOfTabs;

public PagerAdapter(FragmentManager fm, int NumOfTabs) {
    super(fm);
    this.mNumOfTabs = NumOfTabs;
}

@Override
public Fragment getItem(int position) {

    switch (position) {
        case 0:
            TabFragment1 tab1 = new TabFragment1();
            return tab1;
        case 1:
            TabFragment2 tab2 = new TabFragment2();
            return tab2;
        case 2:
            TabFragment3 tab3 = new TabFragment3();
            return tab3;
        case 3:
            TabFragment4 tab4 = new TabFragment4();
            return tab4;
        default:
            return null;
    }
}

解决方案

//以此更新您的getItem()方法

  @Override
    public Fragment getItem(int position) {

        switch (position) {
            case 0:
                Bundle bundle =  new Bundle();
                bundle.putString("YOUR_KEY","YOUR VALUE");
                TabFragment1 tab1 = new TabFragment1();
                tab1.setArguments(bundle);
                return tab1;
            case 1:
                Bundle bundle2 =  new Bundle();
                bundle2.putString("YOUR_KEY","YOUR VALUE");
                TabFragment2 tab2 = new TabFragment2();
                tab2.setArguments(bundle2);
                return tab2;
            case 2:
                Bundle bundle3 =  new Bundle();
                bundle3.putString("YOUR_KEY","YOUR VALUE");
                TabFragment3 tab3 = new TabFragment3();
                tab3.setArguments(bundle3);
                return tab3;
            case 3:
                Bundle bundle4 =  new Bundle();
                bundle4.putString("YOUR_KEY","YOUR VALUE");
                TabFragment4 tab4 = new TabFragment4();
                tab4.setArguments(bundle4);
                return tab4;
            default:
                return null;
        }

//在TabFragment1,TabFragment2,TabFragment3,TabFragment4下 覆盖onActivityCreated()以获取数据字符串,并重写setMenuVisibility(boolean menuVisible)来更新视图

     public static String data;


     @Override
        public void onActivityCreated(@Nullable Bundle savedInstanceState) {
            super.onActivityCreated(savedInstanceState);
            Bundle bundle = getArguments();
            String yourValue = bundle.getString("YOUR_KEY");
imageView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                   TabFragment1.data="Update";
                   TabFragment2.data="Update";
                   TabFragment3.data="Update";
                   TabFragment4.data="Update";
    //update your current View from here
                }
            });
        }



     @Override
        public void setMenuVisibility(boolean menuVisible) {
            super.setMenuVisibility(menuVisible);
            if(menuVisible){
                //update your current View from here
            }
        }

通过使用此选项,您可以从任何片段更新所有片段数据视图.点击

i have three tab fragments TAB1,TAB2 and TAB3. On TAB1 there is a button when when clicked it has to send data to TAB2 and TAB3 using interface and display data in the textView in the respective fragment. So far i have managed to send from TAB1 to TAB2,like below

 //  interface  codes
  public interface IFragmentToActivity {
  void Tab1ToTab2(String value);
 }

 //  in activity 

    @Override
  public void Tab1ToTab2(String value) {
TabFragment2 fragment = (TabFragment2) adapter.getFragment(1);
if (fragment != null) {
    fragment.fragmentCommunicationFragment(value);
} else {
    // Log.i(LOG_TAG, "Fragment 2 is not initialized");
}
   }


  ///   in TAB1 i send data

          @Override
public void onClick(View v) {
    switch (v.getId()) {
        case R.id.button2:
            mCallback.FragmentToFragment("hi from tab 1");
            break;
             }
                   }

how can i make it work for all fragments? this is what i have tried when i want to send to TAB2 and 3.

interface codes

public interface IFragmentToActivity {
void Tab1ToTab2(String value);
void Tab1ToTab3(String value);
     }

TAB1 send data

    @Override
      public void onClick(View v) {
    switch (v.getId()) {
        case R.id.button2:
            mCallback.Tab1ToTab2("hi from tab 1");
            mCallback.Tab1ToTab3(hi from tab 1");
            break;
    }

codes in Main Activity to receive

       @Override
        public void Tab1ToTab2(String value) {
    TabFragment2 fragment = (TabFragment2) adapter.getFragment(1);
    if (fragment != null) {
        fragment.fragmentCommunicationFragment(value);
    } else {
        // Log.i(LOG_TAG, "Fragment 2 is not initialized");
    }
}

@Override
public void Tab1ToTab3(String value) {
    TabFragment3 fragment = (TabFragment3) adapter.getFragment(1);
    if (fragment != null) {
        fragment.FromFragmentOne(value);
    }

    else {
        // Log.i(LOG_TAG, "Fragment 3 is not initialized");
    }
}

/// TAB 2 method receive data

  public void fragmentCommunicationFragment(String value){
      mTextView1.setText(value);
      }

/// TAB 3 method receive data

   public void FromFragmentOne(String kabila){
    mTextView1.setText(kabila);
}

// adapter

 public class PagerAdapter extends FragmentStatePagerAdapter {
private final SparseArray<WeakReference<Fragment>> instantiatedFragments = new SparseArray<>();
private ArrayList<String> mTabHeader;
int mNumOfTabs;

public PagerAdapter(FragmentManager fm, int NumOfTabs) {
    super(fm);
    this.mNumOfTabs = NumOfTabs;
}

@Override
public Fragment getItem(int position) {

    switch (position) {
        case 0:
            TabFragment1 tab1 = new TabFragment1();
            return tab1;
        case 1:
            TabFragment2 tab2 = new TabFragment2();
            return tab2;
        case 2:
            TabFragment3 tab3 = new TabFragment3();
            return tab3;
        case 3:
            TabFragment4 tab4 = new TabFragment4();
            return tab4;
        default:
            return null;
    }
}

解决方案

// Update your getItem() method with this

  @Override
    public Fragment getItem(int position) {

        switch (position) {
            case 0:
                Bundle bundle =  new Bundle();
                bundle.putString("YOUR_KEY","YOUR VALUE");
                TabFragment1 tab1 = new TabFragment1();
                tab1.setArguments(bundle);
                return tab1;
            case 1:
                Bundle bundle2 =  new Bundle();
                bundle2.putString("YOUR_KEY","YOUR VALUE");
                TabFragment2 tab2 = new TabFragment2();
                tab2.setArguments(bundle2);
                return tab2;
            case 2:
                Bundle bundle3 =  new Bundle();
                bundle3.putString("YOUR_KEY","YOUR VALUE");
                TabFragment3 tab3 = new TabFragment3();
                tab3.setArguments(bundle3);
                return tab3;
            case 3:
                Bundle bundle4 =  new Bundle();
                bundle4.putString("YOUR_KEY","YOUR VALUE");
                TabFragment4 tab4 = new TabFragment4();
                tab4.setArguments(bundle4);
                return tab4;
            default:
                return null;
        }

// Under TabFragment1, TabFragment2, TabFragment3, TabFragment4 Override onActivityCreated() to get your data String and setMenuVisibility(boolean menuVisible) to update view

     public static String data;


     @Override
        public void onActivityCreated(@Nullable Bundle savedInstanceState) {
            super.onActivityCreated(savedInstanceState);
            Bundle bundle = getArguments();
            String yourValue = bundle.getString("YOUR_KEY");
imageView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                   TabFragment1.data="Update";
                   TabFragment2.data="Update";
                   TabFragment3.data="Update";
                   TabFragment4.data="Update";
    //update your current View from here
                }
            });
        }



     @Override
        public void setMenuVisibility(boolean menuVisible) {
            super.setMenuVisibility(menuVisible);
            if(menuVisible){
                //update your current View from here
            }
        }

by using this you can update all fragments data view from any fragment. click

这篇关于选项卡片段按钮单击将数据发送到多个选项卡的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆