【发布时间】:2017-05-31 12:00:37
【问题描述】:
我有三个选项卡片段 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;
}
Main 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");
}
}
@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;
}
}
【问题讨论】:
-
我认为你应该在片段中使用 setArgument() 和 getArgument() 让它变得简单。
-
谢谢@AniruddhParihar 我能提供一个关于这个概念的示例代码吗?
-
我已经发布了一个代码。验证它。
标签: android android-fragments android-viewpager