简体   繁体   English

所有选项卡中都会显示相同的片段

[英]Same Fragment appears in all tabs

I have encountered a problem in my Android application. 我的Android应用程序遇到了问题。 When I added two tabs, I also had two fragments. 当我添加两个标签时,我也有两个片段。 But the thing is that the same fragment is appearing on both tabs. 但问题是两个标签上都出现了相同的片段。 The other fragment is not showing up. 另一个片段没有显示出来。 Here is what it looks like. 这是它的样子。

http://i60.tinypic.com/eu0kzs.png

http://i60.tinypic.com/2uh0i1k.png

Here is my code for my activity: 这是我的活动代码:

public class DatabaseFiller extends Activity{
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();

    StrictMode.setThreadPolicy(policy);


    setContentView(R.layout.rmactivity);

    ActionBar actionBar = getActionBar();
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
    actionBar.setSubtitle("Created by Rohit Nandakumar");

    /*ActionBar.Tab searchdb = actionBar.newTab().setText("Search Database");
    ActionBar.Tab searchlist = actionBar.newTab().setText("Show List"); */

    ActionBar.Tab Frag1 = actionBar.newTab().setText("Search Database");
    ActionBar.Tab Frag2 = actionBar.newTab().setText("Show List");

    Fragment fragment1 = new DatabaseFillerFragment();
    Fragment fragment2 = new DeleteDBItems();

    Frag1.setTabListener(new MyTabListener(fragment1));
    Frag2.setTabListener(new MyTabListener(fragment2));

    actionBar.addTab(Frag1);
    actionBar.addTab(Frag2);

}
}

Here is my whole MyTabListener class: 这是我的整个MyTabListener类:

package com.example.foodsaver2;

import android.app.ActionBar.Tab;
import android.app.ActionBar.TabListener; 
import android.app.ActionBar;
import android.app.Fragment;
import android.app.FragmentTransaction;

public class MyTabListener implements TabListener {

public Fragment fragment;

public MyTabListener(Fragment fragment) {
    this.fragment = fragment;
}

@Override
public void onTabReselected(Tab tab, FragmentTransaction ft) {
    // TODO Auto-generated method stub
}

@Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
    // TODO Auto-generated method stub
    if (fragment == null) {
        // If not, instantiate and add it to the activity
        ft.add(android.R.id.content, fragment);
    } else {
        // If it exists, simply attach it in order to show it
        ft.attach(fragment);
    }
}

@Override
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
    // TODO Auto-generated method stub
    if (fragment != null) {
        // Detach the fragment, because another one is being attached
        ft.detach(fragment);
    }
}

}

What am I doing wrong here? 我在这做错了什么? Any help regarding this problem would be appreciated. 任何关于这个问题的帮助将不胜感激。

Initialize the listener, detach the fragment and commit it. 初始化侦听器,分离片段并提交它。

On tab selected just add the fragment else detach. 在选中的选项卡上,只需添加其他分段。

See the following revised code for help - 请参阅以下修订代码以获取帮助 -

public MyTabListener(Activity activity, String tag, Class<T> cls, Bundle args) {
                mActivity = activity;
                mTag = tag;
                mClass = cls;
                mArgs = args;

            fragment  = mActivity.getFragmentManager().findFragmentByTag(mTag);
            if (fragment  != null) {
                FragmentTransaction ft = mActivity.getFragmentManager().beginTransaction();
                ft.detach(fragment);
                ft.commit();
            }
    }


    public void onTabSelected(Tab tab, FragmentTransaction ft) {
                fragment  = Fragment.instantiate(mActivity, mClass.getName(), mArgs);
                ft.add(android.R.id.content, fragment , mTag);
        }

        public void onTabUnselected(Tab tab, FragmentTransaction ft) {
            if (fragment != null) {
                ft.detach(fragment);
            }
        }

您需要在FragmentTransaction上调用commit方法来触发事务发生。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM