简体   繁体   English

片段已添加

[英]Fragment already added

I have 3 Fragments, and 3 buttons, when i click on a button, it changes fragment, but when i click on a item on a fragment list, it opens up a new fragment. 我有3个片段和3个按钮,当我单击一个按钮时,它会更改片段,但是当我单击片段列表中的一个项目时,它将打开一个新片段。

public class MainActivity extends FragmentActivity implements ContactFragment.OnContactClickedListener{
private CalendarFragment calendarFragment;
private CommunicationFragment communicationFragment;
private ContactFragment contactFragment;
private SingleContactFragment singleContactFragment;
//
private FragmentManager manager;
//
private Button btn_calendar, btn_contact, btn_communication;

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

    manager = getSupportFragmentManager();
    manager.beginTransaction()
            .add(R.id.fl_main_container, calendarFragment).commit();
}

private void bind() {
    btn_calendar = (Button) findViewById(R.id.btn_main_calendar);
    btn_communication = (Button) findViewById(R.id.btn_main_communication);
    btn_contact = (Button) findViewById(R.id.btn_main_contact);
    btn_calendar.setOnClickListener(listener);
    btn_communication.setOnClickListener(listener);
    btn_contact.setOnClickListener(listener);
}

private void initFragments() {
    calendarFragment = new CalendarFragment();
    communicationFragment = new CommunicationFragment();
    contactFragment = new ContactFragment();
    singleContactFragment = new SingleContactFragment();
}

private void changeFragment(Fragment f) {
    manager.beginTransaction().replace(R.id.fl_main_container, f).commit();
    manager.executePendingTransactions();
}
private void displayContact(ContactObject contact){
    manager.beginTransaction().replace(R.id.fl_main_container, singleContactFragment).addToBackStack(null).commit();
    manager.executePendingTransactions();
}
private OnClickListener listener = new OnClickListener() {

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        switch (v.getId()) {
        case R.id.btn_main_calendar:
            changeFragment(calendarFragment);
            break;
        case R.id.btn_main_communication:
            changeFragment(communicationFragment);
            break;
        case R.id.btn_main_contact:
            changeFragment(contactFragment);
            break;
        }
    }
};

@Override
public void onClick(ContactObject contact) {
    // TODO Auto-generated method stub
    displayContact(contact);
}
}

When i click on Contact, i choose a contact, and i click on contact again and then i start to tap on my back button, a "IllegalStateException ; Fragment already added : ContactFragment" is thrown. 当我单击“联系人”时,我选择一个联系人,然后再次单击“联系人”,然后开始点击我的“后退”按钮,将引发“ IllegalStateException;已添加的片段:ContactFragment”。 And i don't see why. 而且我不明白为什么。

Here's the logcat : 这是logcat:

    07-02 13:32:31.046: E/AndroidRuntime(11412): FATAL EXCEPTION: main
07-02 13:32:31.046: E/AndroidRuntime(11412): java.lang.IllegalStateException: Fragment already added: ContactFragment{420b6a40 #0 id=0x7f060000}
07-02 13:32:31.046: E/AndroidRuntime(11412):    at android.support.v4.app.FragmentManagerImpl.addFragment(FragmentManager.java:1192)
07-02 13:32:31.046: E/AndroidRuntime(11412):    at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:646)
07-02 13:32:31.046: E/AndroidRuntime(11412):    at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1484)
07-02 13:32:31.046: E/AndroidRuntime(11412):    at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:482)
07-02 13:32:31.046: E/AndroidRuntime(11412):    at com.big5media.ercoiffure.MainActivity.changeFragment(MainActivity.java:57)
07-02 13:32:31.046: E/AndroidRuntime(11412):    at com.big5media.ercoiffure.MainActivity.access$1(MainActivity.java:55)
07-02 13:32:31.046: E/AndroidRuntime(11412):    at com.big5media.ercoiffure.MainActivity$1.onClick(MainActivity.java:79)
07-02 13:32:31.046: E/AndroidRuntime(11412):    at android.view.View.performClick(View.java:4240)
07-02 13:32:31.046: E/AndroidRuntime(11412):    at android.view.View$PerformClick.run(View.java:17721)
07-02 13:32:31.046: E/AndroidRuntime(11412):    at android.os.Handler.handleCallback(Handler.java:730)
07-02 13:32:31.046: E/AndroidRuntime(11412):    at android.os.Handler.dispatchMessage(Handler.java:92)
07-02 13:32:31.046: E/AndroidRuntime(11412):    at android.os.Looper.loop(Looper.java:137)
07-02 13:32:31.046: E/AndroidRuntime(11412):    at android.app.ActivityThread.main(ActivityThread.java:5103)
07-02 13:32:31.046: E/AndroidRuntime(11412):    at java.lang.reflect.Method.invokeNative(Native Method)
07-02 13:32:31.046: E/AndroidRuntime(11412):    at java.lang.reflect.Method.invoke(Method.java:525)
07-02 13:32:31.046: E/AndroidRuntime(11412):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
07-02 13:32:31.046: E/AndroidRuntime(11412):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
07-02 13:32:31.046: E/AndroidRuntime(11412):    at dalvik.system.NativeStart.main(Native Method)

如果不需要导航,请在您的changeFragment方法上尝试添加addToBackStack(null)...否则,最好删除片段并再次添加。

manager.beginTransaction().replace(R.id.fl_main_container, f).addToBackStack(null).commit();

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

相关问题 IllegalStateException:片段已添加 - IllegalStateException: Fragment already added 片段已经添加,虽然它只添加了一次 - Fragment already added although it is only added once java.lang.IllegalStateException:片段已添加 - java.lang.IllegalStateException: Fragment already added java.lang.IllegalStateException:已添加片段: - java.lang.IllegalStateException: Fragment already added : 将数据传递给添加的片段 - IlligalStateException:片段已处于活动状态 - Passing data to added Fragment - IlligalStateException: Fragment already active 如何修复代码中已添加的片段? - How do I fix Fragment already added in my code? 在使用带有 ViewPager 的 EventBus 时,有时会出现“已添加片段” - “Fragment already added” occurs sometimes while using EventBus with ViewPager 从 backstack 获取片段后按回崩溃应用程序,“Android IllegalStateException Fragment already added” - Pressing back after getting fragment from backstack crashes app, “Android IllegalStateException Fragment already added” 地图片段。 膨胀布局时:java.lang.IllegalStateException: Fragment already added - MapFragment. When inflating a layout: java.lang.IllegalStateException: Fragment already added 更换片段时如何防止“java.lang.IllegalStateException:Fragment already added”? - How can I prevent “java.lang.IllegalStateException: Fragment already added” when replacing fragments?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM