我想调用(tabbed)片段方法将数据带到活动状态。
因此,当更改选项卡时,我希望第一个选项卡的表单通过getDetails()
方法
@Override
public void onTabUnselected(TabLayout.Tab tab) {
if (tab.getText().equals("Owner")) {
//invoking method here
Log.i(TAG, tab.getText().toString() + " unselected");
}
我尝试使用FragmentManager但没有运气,请帮忙!
编辑 - 这是我想要调用的方法
public Bundle getData() {
Bundle bundle = new Bundle();
bundle.putString("area", area);
bundle.putString("villageTown", villageTown.getSelectedItem().toString());
bundle.putString("ownerName", ownerName);
bundle.putString("fatherHusbandName", fatherHusbandName);
bundle.putString("category", category.getSelectedItem().toString());
bundle.putString("address", address);
bundle.putString("mobileNumber", mobileNumber);
bundle.putString("telephoneNumber", telephoneNumber);
return bundle;
}
答案 0 :(得分:1)
我假设您使用ViewPager
绑定到Tab
。首先,您需要保留您在ViewPager
中使用的片段实例。
我解释了如何在此答案中获取您在ViewPager
中使用的片段实例。
https://stackoverflow.com/a/39274141/1559852
您的问题需要不同的onPageChangeListener
实施。您需要保留lastSelectedPosition
ViewPager
,并在选择页面后将您的数据发送到活动,然后更新lastSelectedPosition
。这是一个示例实现
int lastSelectedPosition = viewPager.getCurrentItem();
viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
// Here's your instance
YourFragment fragment =(YourFragment)yourPagerAdapter.getRegisteredFragment(lastSelectedPosition);
// Here're your details. You can update.
YourDetails details = yourFragment.getDetils();
lastSelectedPosition = position;
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
我希望这对你有帮助。祝你好运。
答案 1 :(得分:1)
@Override
public void onTabUnselected(TabLayout.Tab tab) {
if (tab.getText().toString().equalsIgnoreCase("owner")) {
OwnerForm frag = (OwnerForm) getSupportFragmentManager().getFragments().get(0);
bundle = frag.getData();
}
Log.i(TAG, tab.getText().toString() + " says hi"); //test statement
}
使用getFragments().get()
为我做了诀窍,我不知道FragmentManager会保留所有活动片段的列表,因此您不必使用导致空对象错误的getFragmentById()
。 / p>
答案 2 :(得分:0)
我强烈建议将片段逻辑保留在片段中。从活动调用类的片段可以通过多种方式完成,如接口。但是,调用片段方法的Activity会导致问题。当你特别试图找到一个未在屏幕上显示的片段方法时。
但是,您可以在填写表单时将数据写入片段中的共享首选项,并且当调用onTabUnselected时,您可以从活动中的共享首选项中读取数据。我承认这不是一个好的解决方案。我希望我能正确理解你的问题。