选项卡片段按钮单击将数据发送到多个选项卡 [英] Tab Fragment Button Click send data to more than one tabFragment
问题描述
// 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屋!