我正在使用TabLayout和ViewPager.I成功集成它并从片段中使用。这是我的mainTabActivity java类
public class MainTabActivity extends AppCompatActivity {
private CustomTabLayout tabLayout;
private ViewPager viewPager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_simple_tabs);
viewPager = (ViewPager) findViewById(R.id.viewpager);
setupViewPager(viewPager);
tabLayout = (CustomTabLayout)findViewById(R.id.tabs);
tabLayout.setupWithViewPager(viewPager);
findViewById(R.id.tab_ticket).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent=new Intent(MainTabActivity.this, TicketsActivity.class);
startActivity(intent);
overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);
}
});
findViewById(R.id.tab_main).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Log.e("BottomClickAction","BottomClickAction");
}
});
}
private void setupViewPager(ViewPager viewPager) {
ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
adapter.addFragment(new OneWayFragment(), "ONE");
adapter.addFragment(new TwoFragment(), "ROUND");
viewPager.setAdapter(adapter);
}
class ViewPagerAdapter extends FragmentPagerAdapter {
private final List<Fragment> mFragmentList = new ArrayList<>();
private final List<String> mFragmentTitleList = new ArrayList<>();
public ViewPagerAdapter(FragmentManager manager) {
super(manager);
}
@Override
public Fragment getItem(int position) {
return mFragmentList.get(position);
}
@Override
public int getCount() {
return mFragmentList.size();
}
public void addFragment(Fragment fragment, String title) {
mFragmentList.add(fragment);
mFragmentTitleList.add(title);
}
@Override
public CharSequence getPageTitle(int position) {
return mFragmentTitleList.get(position);
}
}
} 我也有自定义底栏。现在我试着解释我的问题。在我的片段包含一些元素,来自示例微调,Textviews等。我的问题是:当我点击底栏时,我如何从当前片段获取信息?我的意思是,spinner'data信息,Textview的gettext等。 我怎么能解决我的问题?是不是可以不使用静态变量?
答案 0 :(得分:0)
您可以在viewpager中找到片段OneWayFragment
,如下所示:
public OneWayFragment getOneWayFragment() {
return (OneWayFragment) getSupportFragmentManager().findFragmentByTag(
"android:switcher:" + R.id.viewPager + ":" + 0);
}
public TwoFragment getTwoFragment() {
return (TwoFragment) getSupportFragmentManager().findFragmentByTag(
"android:switcher:" + R.id.viewPager + ":" + 1);
}
您可以从OneWayFragment
或TwoFragment
访问公共方法获取所需的数据。
例如,从OneWayFragment
创建方法getText:
public String getData() {
return tv.getText().toString();
}
在你的MainTabActivity
中。例如,您点击按钮的标识为tab_main
,您可以从OneWayFragment
获取数据。
findViewById(R.id.tab_main).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Log.e("BottomClickAction","BottomClickAction");
OneWayFragment fragment = getOneWayFragment();
if(fragment != null) {
String data = fragment.getData();
}
}
});
答案 1 :(得分:0)
在片段中创建自己的方法,如getFragmentData()。随时访问此方法。在你的情况下:
1)参考你的片段 _oneWayaFrgament = new OneWayFragment() adapter.addFragment(_oneWayaFrgament,“ONE”);
2)调用_oneWayaFrgament.getFragmentData()
同样在TwoFragment上应用条件逻辑。
请通过识别当前片段来调用getFragmentData()。
答案 2 :(得分:0)
是的,您可以在片段中包含公共变量和方法,然后您可以设置并获取变量或从您的活动中调用您的方法。 例如在你的片段中:
public String myString;
public Button someButton;
或
public void fillMyTextView(){//some codes};
在您的活动中,您可以调用这些方法或访问您的观点,如下所示:
myFragment.fillMyTextView("hello");
myFragment.someButton.setText("my btn");
答案 3 :(得分:0)
我建议你创建单例作为状态对象(你想要作为视图的状态,你可以使用整数或短或字节用于状态标记内存)根据需要使用,并在完成使用后无效。这样,您可以随时访问任何片段或活动中的任何数据。您可以使用其他实现,如界面类型作为设计和架构方式。但取决于状态的重要性。