标签在安卓他们的下一个片段执行codeS present [英] Tabs execute the codes present in their next fragments in android
问题描述
我想实现标签
与刷卡使用 ViewPager
4 片段
。当我刷卡fragmnets各自的 XML布局
显示正确的每个选项卡上的选项,但该片段的code不正确执行。
例如,以下选项卡有各自的片段吧。
TAB0-ButtonFragment
公共类ButtonFragment扩展片段{@覆盖
公共查看onCreateView(LayoutInflater充气器,容器的ViewGroup,
捆绑savedInstanceState){ 查看rootView = inflater.inflate(R.layout.fragment_button,集装箱,FALSE);
Log.i(内部,按钮片段);
返回rootView;
}
TAB1-ImageFragment
公共类ImageFragment扩展片段{@覆盖
公共查看onCreateView(LayoutInflater充气器,容器的ViewGroup,
捆绑savedInstanceState){ 查看rootView = inflater.inflate(R.layout.fragment_image,集装箱,FALSE);
Log.i(内部,图像片段);
返回rootView;
}
TAB2-TextFragment
公共类TextFragment扩展片段{@覆盖
公共查看onCreateView(LayoutInflater充气器,容器的ViewGroup,
捆绑savedInstanceState){ 查看rootView = inflater.inflate(R.layout.fragment_text,集装箱,FALSE);
Log.i(内部,文字片段);
返回rootView;
}
TAB3试验
公共类测试扩展片段{
@覆盖
公共查看onCreateView(LayoutInflater充气器,容器的ViewGroup,
捆绑savedInstanceState){ 查看rootView = inflater.inflate(R.layout.temp,集装箱,FALSE);
Log.i(内部,tessssssssst片段);
返回rootView;
}
在显示选项卡
我得到TAB0和TAB1同时日志消息。然后滑动和去TAB1后,我得到TAB2日志消息。滑动到TAB2之后我得到日志信息选项卡3和达到标签3时dispalyed没有日志信息。谁能告诉我怎么可以执行相应的codeS为各自的标签?我剩下的codeS情况如下:
公共类TabsPagerAdapter扩展FragmentPagerAdapter {//更新 - code格式公共TabsPagerAdapter(FragmentManager FM){
超(FM);
}@覆盖
公共片段的getItem(INT指数){
Log.i(索引,+指数);
开关(指数){
情况下0:
//顶级片段活动
返回新ButtonFragment();
情况1:
//游戏片段活动
返回新ImageFragment();
案例2:
//电影片段活动
返回新TextFragment();
案例3:
返回新的测试();
} 返回null;
}@覆盖
公众诠释的getCount(){
//获取项目计数 - 等于标签数
返回4;
}
MainActivity
公共类MainActivity扩展FragmentActivity实现OnTabChangeListener,OnPageChangeListener {私人TabsPagerAdapter mAdapter;
私人ViewPager mViewPager;
私人TabHost mTabHost;@覆盖
保护无效的onCreate(捆绑savedInstanceState){
super.onCreate(savedInstanceState);
的setContentView(R.layout.activity_main); mViewPager =(ViewPager)findViewById(R.id.viewpager); //初始化标签
initialiseTabHost();
mAdapter =新TabsPagerAdapter(getSupportFragmentManager());
//片段和ViewPager初始化
mViewPager.setAdapter(mAdapter);
mViewPager.setOnPageChangeListener(MainActivity.this);
}//方法添加TabHost
私有静态无效AddTab(MainActivity活动,TabHost tabHost,TabHost.TabSpec则tabspec){
tabSpec.setContent(新MyTabFactory(活动));
tabHost.addTab(则tabspec);
}//管理标签的变化,与网页同步它
公共无效onTabChanged(字符串标签){
INT POS = this.mTabHost.getCurrentTab();
this.mViewPager.setCurrentItem(POS)
}@覆盖
公共无效onPageScrollStateChanged(INT为arg0){
}//管理页面的变化,与标签同步它
@覆盖
公共无效onPageScrolled(INT为arg0,ARG1浮球,诠释ARG2){
INT POS = this.mViewPager.getCurrentItem();
this.mTabHost.setCurrentTab(POS)
}@覆盖
公共无效使用onPageSelected(INT为arg0){}
//创建标签
私人无效initialiseTabHost(){
mTabHost =(TabHost)findViewById(android.R.id.tabhost);
mTabHost.setup(); // TODO这里写您的标签
MainActivity.AddTab(此,this.mTabHost,this.mTabHost.newTabSpec(ButtonTab)setIndicator(ButtonTab)。);
MainActivity.AddTab(此,this.mTabHost,this.mTabHost.newTabSpec(ImageTab)setIndicator(ImageTab)。);
MainActivity.AddTab(此,this.mTabHost,this.mTabHost.newTabSpec(TextTab)setIndicator(TextTab)。);
MainActivity.AddTab(此,this.mTabHost,this.mTabHost.newTabSpec(TestingTab)setIndicator(TestingTab)。); mTabHost.setOnTabChangedListener(本);
}
这是viewpager作为viewpager这样的意见存在产生的碎片,你不能改变它的默认行为,所以用户可以在它们之间滑动,让老查看滑出屏幕,滑动到屏幕上的新观点。你可以写你的code这样的
@覆盖
公共无效setUserVisibleHint(布尔isVisibleToUser){
super.setUserVisibleHint(isVisibleToUser);
如果(isVisibleToUser){
Log.i(内部,按钮片段);
}其他{
//片段是不可见
}
}
所以,当片段可见你的code执行
I am trying to implement Tabs
with swipe using ViewPager
and 4 Fragments
. When I swipe the tabs the respective xml layouts
of the fragmnets are displayed correctly on each tab but the code of the fragments are not executed correctly.
eg-The following tabs have the respective fragments in it.
Tab0-ButtonFragment
public class ButtonFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_button, container, false);
Log.i("inside", "button fragment");
return rootView;
}
Tab1-ImageFragment
public class ImageFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_image, container, false);
Log.i("inside", "image fragment");
return rootView;
}
Tab2-TextFragment
public class TextFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_text, container, false);
Log.i("inside", "text fragment");
return rootView;
}
Tab3-Test public class Test extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.temp, container, false);
Log.i("inside", "tessssssssst fragment");
return rootView;
}
When the tabs are displayed I get the log message for tab0 and tab1 simultaneously. Then after swiping and going to tab1 i get the log message for tab2. After swiping to tab2 i get log message for tab 3 and when tab 3 is reached no log message is dispalyed. Can anyone tell me how can I execute the respective codes for the respective tabs? My remaining codes are as below:
public class TabsPagerAdapter extends FragmentPagerAdapter { //Update - code formatting
public TabsPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem( int index) {
Log.i("index", "" + index);
switch (index) {
case 0:
// Top Rated fragment activity
return new ButtonFragment();
case 1:
// Games fragment activity
return new ImageFragment();
case 2:
// Movies fragment activity
return new TextFragment();
case 3:
return new Test();
}
return null;
}
@Override
public int getCount() {
// get item count - equal to number of tabs
return 4;
}
MainActivity
public class MainActivity extends FragmentActivity implements OnTabChangeListener, OnPageChangeListener {
private TabsPagerAdapter mAdapter;
private ViewPager mViewPager;
private TabHost mTabHost;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mViewPager = (ViewPager) findViewById(R.id.viewpager);
// Tab Initialization
initialiseTabHost();
mAdapter = new TabsPagerAdapter(getSupportFragmentManager());
// Fragments and ViewPager Initialization
mViewPager.setAdapter(mAdapter);
mViewPager.setOnPageChangeListener(MainActivity.this);
}
// Method to add a TabHost
private static void AddTab(MainActivity activity, TabHost tabHost, TabHost.TabSpec tabSpec) {
tabSpec.setContent(new MyTabFactory(activity));
tabHost.addTab(tabSpec);
}
// Manages the Tab changes, synchronizing it with Pages
public void onTabChanged(String tag) {
int pos = this.mTabHost.getCurrentTab();
this.mViewPager.setCurrentItem(pos);
}
@Override
public void onPageScrollStateChanged(int arg0) {
}
// Manages the Page changes, synchronizing it with Tabs
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
int pos = this.mViewPager.getCurrentItem();
this.mTabHost.setCurrentTab(pos);
}
@Override
public void onPageSelected(int arg0) {
}
// Tabs Creation
private void initialiseTabHost() {
mTabHost = (TabHost) findViewById(android.R.id.tabhost);
mTabHost.setup();
// TODO Put here your Tabs
MainActivity.AddTab(this, this.mTabHost, this.mTabHost.newTabSpec("ButtonTab").setIndicator("ButtonTab"));
MainActivity.AddTab(this, this.mTabHost, this.mTabHost.newTabSpec("ImageTab").setIndicator("ImageTab"));
MainActivity.AddTab(this, this.mTabHost, this.mTabHost.newTabSpec("TextTab").setIndicator("TextTab"));
MainActivity.AddTab(this, this.mTabHost, this.mTabHost.newTabSpec("TestingTab").setIndicator("TestingTab"));
mTabHost.setOnTabChangedListener(this);
}
This is default behaviour of viewpager you can not change it as viewpager creates fragments so that the views exist, so the user can swipe between them, so that the old view sliding off the screen and the new view sliding onto the screen. You can write your code like this
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if (isVisibleToUser) {
Log.i("inside", "button fragment");
}else{
// fragment is not visible
}
}
so that when fragment is visible your code execute
这篇关于标签在安卓他们的下一个片段执行codeS present的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!