5

मेरी गतिविधि में (कि android.support.v7.app.ActionBarActivity फैली) मैं एक टुकड़ा सामान्य रूप से है कि इस तरह मेरे विचार में शामिल :IllegalStateException: DialogFragment एक कंटेनर को देखने के लिए संलग्न नहीं किया जा सकता - (ActionBarActivity में)

<?xml version="1.0" encoding="utf-8"?> 
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    > 
    <fragment 
     android:name="com.fragments.SomeFragment" 
     android:id="@+id/fragment_id" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     /> 
</FrameLayout> 

यह अच्छी तरह से काम करता है।

लेकिन मैंने इस खंड को एक संवाद के रूप में पुन: उपयोग करने का निर्णय लिया है, इसलिए मैंने इसे औरroid.support.v4.app.DialogFragment (समर्थित लाइब्रेरी से) तक बढ़ा दिया।

किसी अन्य बदलावों के बिना मैं अपवाद

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.ExampleActivity}: java.lang.IllegalStateException: DialogFragment can not be attached to a container view 
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180) 
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230) 
at android.app.ActivityThread.access$600(ActivityThread.java:141) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234) 
at android.os.Handler.dispatchMessage(Handler.java:99) 
at android.os.Looper.loop(Looper.java:137) 
at android.app.ActivityThread.main(ActivityThread.java:5041) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:511) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
at dalvik.system.NativeStart.main(Native Method) 

    Caused by: java.lang.IllegalStateException: DialogFragment can not be attached to a container view 
at android.support.v4.app.DialogFragment.onActivityCreated(DialogFragment.java:364) 
at android.support.v4.app.Fragment.performActivityCreated(Fragment.java:1486) 
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:947) 
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1104) 
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1086) 
at android.support.v4.app.FragmentManagerImpl.dispatchActivityCreated(FragmentManager.java:1877) 
at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:552) 
at com.*.RoboActionBarActivity.onStart(RoboActionBarActivity.java:58) 
at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1164) 
at android.app.Activity.performStart(Activity.java:5114) 
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2153) 
... 11 more 

मैं इस समस्या का समाधान कैसे कर या एक संवाद के रूप में मेरे मानक टुकड़ा का उपयोग कर सकते हैं?

मेरे गतिविधि:

public class SomeActivity extends RoboActionBarActivity{ 

    private SomeFragment someFragment; 

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

     this.someFragment = (SomeFragment) getSupportFragmentManager().findFragmentById(
      R.id.fragment_id); 
    } 
} 

RoboActionBarActivity एक ActionBarActivity कि (RoboGuice से) RoboContext लागू करता इंजेक्शन सक्षम बनाना है।

public class RoboActionBarActivity extends ActionBarActivity implements RoboContext { 
private EventManager eventManager; 
private final HashMap<Key<?>, Object> scopedObjects = new HashMap<Key<?>, Object>(); 

@Inject 
private ContentViewListener ignored; // BUG find a better place to put this 

@Override 
protected void onCreate(final Bundle savedInstanceState) { 
    final RoboInjector injector = RoboGuice.getInjector(this); 
    this.eventManager = injector.getInstance(EventManager.class); 
    injector.injectMembersWithoutViews(this); 
    super.onCreate(savedInstanceState); 
    this.eventManager.fire(new OnCreateEvent(savedInstanceState)); 
} 

@Override 
protected void onRestart() { 
    super.onRestart(); 
    this.eventManager.fire(new OnRestartEvent()); 
} 

@Override 
protected void onStart() { 
    super.onStart(); 
    this.eventManager.fire(new OnStartEvent()); 
} 

@Override 
protected void onResume() { 
    super.onResume(); 
    this.eventManager.fire(new OnResumeEvent()); 
} 

@Override 
protected void onPause() { 
    super.onPause(); 
    this.eventManager.fire(new OnPauseEvent()); 
} 

@Override 
protected void onNewIntent(final Intent intent) { 
    super.onNewIntent(intent); 
    this.eventManager.fire(new OnNewIntentEvent()); 
} 

@Override 
protected void onStop() { 
    try { 
     this.eventManager.fire(new OnStopEvent()); 
    } finally { 
     super.onStop(); 
    } 
} 

@Override 
protected void onDestroy() { 
    try { 
     this.eventManager.fire(new OnDestroyEvent()); 
    } finally { 
     try { 
      RoboGuice.destroyInjector(this); 
     } finally { 
      super.onDestroy(); 
     } 
    } 
} 

@Override 
public void onConfigurationChanged(final Configuration newConfig) { 
    final Configuration currentConfig = getResources().getConfiguration(); 
    super.onConfigurationChanged(newConfig); 
    this.eventManager.fire(new OnConfigurationChangedEvent(currentConfig, newConfig)); 
} 

@Override 
public void onContentChanged() { 
    super.onContentChanged(); 
    RoboGuice.getInjector(this).injectViewMembers(this); 
    this.eventManager.fire(new OnContentChangedEvent()); 
} 

@Override 
protected void onActivityResult(final int requestCode, final int resultCode, final Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    this.eventManager.fire(new OnActivityResultEvent(requestCode, resultCode, data)); 
} 

@Override 
public Map<Key<?>, Object> getScopedObjectMap() { 
    return this.scopedObjects; 
} 
} 
+0

क्या आप कोड का प्रासंगिक हिस्सा दिखा सकते हैं? – Szymon

+0

क्या आप प्रासंगिक भागों के साथ क्या मतलब रखते हैं उससे अधिक विशिष्ट हो सकते हैं? – salcosand

+0

बस आपने जो जोड़ा है :) – Szymon

उत्तर

1

मैं जानता हूँ कि यह कुछ समय पहले कहा गया था लेकिन जिस तरह से मैं इस के आसपास मिल गया गतिशील बल्कि एक्सएमएल की तुलना में मेरी टुकड़ा बनाने के लिए किया गया था। शायद एक बेहतर समाधान है लेकिन यह मेरे लिए काम कर रहा है।

public class MyActivity { 

    private MyFragment mMyFragment; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     if (savedInstanceState == null) { 
      mMyFragment = new MyFragment(); 
      if (mMyFragment != null) { 
       FragmentManager fragmentManager = getSupportFragmentManager(); 
       fragmentManager.beginTransaction() 
        .add(android.R.id.content, mMyFragment) 
        .commit(); 
      } 
     } 
    } 
} 
1

आप इस समस्या को दूर करता है, तो आप अपने DialogFragment के अंदर onCreate() में कहीं setShowsDialog(false) आह्वान कर सकते हैं।

लेकिन जब आप इस खंड को एक संवाद के रूप में उपयोग करना चाहते हैं तो आपको setShowsDialog(true) का आह्वान करना होगा।

+0

के आसपास काम करने का कोई तरीका है यदि आप इसका उपयोग करते हैं, तो 'setShowDialog (true)' कहां और कहाँ कहा जाना चाहिए यदि मैं एक संवाद agian के रूप में टुकड़ा दिखाना चाहता हूं? – prom85

संबंधित मुद्दे