インタフェースを使用して、あるフラグメントから別のフラグメントにデータを渡すことに成功しました。2つ以上のフラグメント間でデータを渡す
MainActivity.java
MainActivity.java
public class MainActivity extends AppCompatActivity implements InputTab.SendMessage, FollowingTab.SendMessage, FollowerTab.SendMessage, ProfileTab.SendMessage, UserSearchResultTab.SendMessage {
private SectionsPageAdapter pageAdapter;
ViewPager viewPager;
public static String currentUser;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.container, new ProfileTab());
fragmentTransaction.commit();
pageAdapter = new SectionsPageAdapter(getSupportFragmentManager());
// Sets up the ViewPager with the sections adapter
viewPager = (ViewPager) findViewById(R.id.container);
setupViewPager(viewPager);
TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs);
tabLayout.setupWithViewPager((viewPager));
}
// Adds fragments to SectionsPageAdapter and gives names for the corresponding tab
private void setupViewPager(ViewPager viewPager) {
SectionsPageAdapter adapter = new SectionsPageAdapter(getSupportFragmentManager());
adapter.addFragment(new InputTab(), "Search");
adapter.addFragment(new ProfileTab(), "Profile");
adapter.addFragment(new GithubTab(), "Github Repos");
adapter.addFragment(new FollowerTab(), "Followers");
adapter.addFragment(new FollowingTab(), "Followings");
adapter.addFragment(new UserSearchResultTab(), "test");
viewPager.setAdapter(adapter);
}
@Override
public void sendDataToProfile(String message) {
String tag = "android:switcher:" + R.id.container + ":" + 1;
ProfileTab profile = (ProfileTab) getSupportFragmentManager().findFragmentByTag(tag);
profile.displayReceivedData(message);
}
@Override
public void sendDataToFollowers(String message) {
String tag = "android:switcher:" + R.id.container + ":" + 3;
FollowerTab follower = (FollowerTab) getSupportFragmentManager().findFragmentByTag(tag);
follower.displayReceivedData(message);
}
InputTab.javaにおけるインターフェースのsendMessage
// Interface for passing-in data to a different tab(fragment)
interface SendMessage {
void sendDataToProfile(String message);
//void sendDataToSearchResult(String message);
void sendDataToResult(String message);
//void sendDataToFollowing(String message);
}
ProfileTab.javaにおける受信
// This is the part where it handles the data passed in from another fragment (tab)
protected void displayReceivedData(String message)
{
fetchData(message);
}
これはうまくいきますが、の問題は2つ以上のフラグメントでは機能しないということです。 - > B、C、D ...
私は、この特定のチュートリアルに続く:sendDataToProfileが正常に動作しながら、だから私のMainActivity.javaに、私のsendDataToFollowersは私にエラーを与えるだろうhttps://www.journaldev.com/14207/android-passing-data-between-fragments
を。私がそれをデバッグしたとき、FollowerTabフォロワーはnullでした。
2つ以上のフラグメントで機能するようにするにはどうすればよいでしょうか?あなたはこれを試すことができ
@AmitVaghelaしかし、私はないですアクティビティにデータを送信します。私はTabLayoutの一部である別のフラグメントにデータを送信する必要があります – Dawn17
あなたは、データを正しく渡したいタブの間を変更するとき、あなたは意味しますか? –
はいいいえ – Dawn17