Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 相同的片段出现在所有选项卡中_Java_Android_Android Fragments - Fatal编程技术网

Java 相同的片段出现在所有选项卡中

Java 相同的片段出现在所有选项卡中,java,android,android-fragments,Java,Android,Android Fragments,我在Android应用程序中遇到了一个问题。当我添加两个选项卡时,我还有两个片段。但问题是相同的片段出现在两个选项卡上。另一个片段没有出现。这是它的样子 以下是我的活动代码: public class DatabaseFiller extends Activity{ public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); StrictMode.ThreadPol

我在Android应用程序中遇到了一个问题。当我添加两个选项卡时,我还有两个片段。但问题是相同的片段出现在两个选项卡上。另一个片段没有出现。这是它的样子

以下是我的活动代码:

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);

}
}
以下是我的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);
    }
}

}

我做错了什么?对此问题的任何帮助都将不胜感激。

您需要调用FragmentTransaction上的提交方法来触发事务的发生。

初始化侦听器,分离片段并提交它

在选中的选项卡上,只需添加片段即可

请参阅以下修订的代码以获取帮助-

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);
            }
        }
publicMyTableListener(活动、字符串标记、类cls、捆绑参数){
活动性=活动性;
mTag=标签;
mClass=cls;
mArgs=args;
fragment=mActivity.getFragmentManager().findFragmentByTag(mTag);
if(片段!=null){
FragmentTransaction ft=MacActivity.getFragmentManager().beginTransaction();
ft.分离(碎片);
ft.commit();
}
}
已选择的公共事务(选项卡,碎片事务ft){
fragment=fragment.instantiate(mActivity,mClass.getName(),mArgs);
ft.add(android.R.id.content、fragment、mTag);
}
已选择公共空页(选项卡,碎片事务ft){
if(片段!=null){
ft.分离(碎片);
}
}

这只会使应用程序崩溃。我将ft.commit()添加到所有方法中。