Android片段在布局中复制对象

Android片段在布局中复制对象,android,android-fragments,android-actionbar,Android,Android Fragments,Android Actionbar,我正在尝试用新的片段和动作条构建一个Android 4.0应用程序。 我做得很好,但我现在有点小问题 当我把一个片段放在一个选项卡中,例如,片段布局中的一个时间选择器,在模拟器中,它会出现两次,一个在另一个之上 这是我的密码: public class NetworksActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(save

我正在尝试用新的片段和动作条构建一个Android 4.0应用程序。 我做得很好,但我现在有点小问题

当我把一个片段放在一个选项卡中,例如,片段布局中的一个时间选择器,在模拟器中,它会出现两次,一个在另一个之上

这是我的密码:

public class NetworksActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.networks);

    // setup Action Bar for tabs
    ActionBar actionBar = getActionBar();
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

    // instantiate fragment for the tab
    Fragment networksFragment = new NetworksFragment();
    // add a new tab and set its title text and tab listener
    actionBar.addTab(actionBar.newTab().setText("Sensors")
            .setTabListener(new ActionTabListener(networksFragment)));
}}


它似乎把两个片段(两个副本)放在同一个活动中。 你知道这是什么原因吗


提前感谢。

看起来您正在用XML定义一个片段,当布局膨胀时(从NetworksActivity.setContentView(R.layout.networks))将其实例化,然后您将在其下方创建另一个实例


除非我遗漏了什么,那是你的问题。如果您要手动实例化它并将其添加到代码中,则无需在XML中定义它。

我遇到了一个类似的问题。我解决它的方法是从我的片段类中删除这段代码:

左这段代码来自我的片段XML:

 <fragment
        android:id="@+id/spinnerFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="1"
        class="com.example.SpinnerFragment" />


我想你也可以这样做:)

这是正确的。如果要使用选项卡侦听器添加片段,则不需要将其添加到xml布局中。在布局中添加一次,在TabListener中添加时再次添加
public class NetworksFragment extends Fragment {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {

        return inflater.inflate(R.layout.networks_fragment, container, false);
    }
}
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <TimePicker
        android:id="@+id/timePicker1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</FrameLayout>
public class ActionTabListener implements ActionBar.TabListener {

    private NetworksFragment frag;

    // Called to create an instance of the listener when adding a new tab
    public ActionTabListener(NetworksFragment fragment) {
        frag = fragment;
    }

    @Override
    public void onTabReselected(Tab arg0, FragmentTransaction arg1) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onTabSelected(Tab tab, FragmentTransaction ft) {    
        ft.add(R.id.net_frag, frag, null);      
    }

    @Override
    public void onTabUnselected(Tab tab, FragmentTransaction ft) {
        ft.remove(frag);        
    }
}
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();

CameraFragment cameraFragment = new CameraFragment();
fragmentTransaction.add(R.id.spinnerFragment, spinnerFragment);

fragmentTransaction.commit();
 <fragment
        android:id="@+id/spinnerFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="1"
        class="com.example.SpinnerFragment" />