Android片段在布局中复制对象
我正在尝试用新的片段和动作条构建一个Android 4.0应用程序。 我做得很好,但我现在有点小问题 当我把一个片段放在一个选项卡中,例如,片段布局中的一个时间选择器,在模拟器中,它会出现两次,一个在另一个之上 这是我的密码: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
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" />