10

Chciałbym dodać fragment do okna (może to być zarówno DialogFragment lub regularna Dialog). Jak mogę to zrobić?Dodanie fragmentu do dialogowym

Oto mój DialogFragment:

public class MyDialogFragment extends DialogFragment { 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     MyDialogFragment2 dialog = new MyDialogFragment2(); 
     View v = inflater.inflate(R.layout.news_articles, container, false); 
     getActivity().getSupportFragmentManager().beginTransaction().add(R.id.fragment_container, dialog).commit(); 
     return v; 
    } 

} 

Oto news_article.xml:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/fragment_container" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" /> 

Oto moja główna działalność:

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    findViewById(R.id.button).setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View arg0) { 
      MyDialogFragment dialog = new MyDialogFragment(); 
      dialog.show(getSupportFragmentManager(), "asdf"); 
     } 
    }); 
} 

Ale gdy próbuję go uzyskać:

No view found for id 0x7f070002 for fragment MyDialogFragment2 

Myślę, że to dlatego, że FragmentManager z działalności nie jest jedyną, którą należy dodać do nich, ale nie mogę znaleźć jednego z DialogFragment, gdzie to jest? .

+2

'getChildFragmentManager(). BeginTransaction() ....' – Luksprog

+0

Dzięki, ale to działa tylko z API 17, nie jest tak? – Kalisky

+1

Z natywnymi fragmentami tak, jak zostały one wprowadzone z 4.2. Ale zawsze masz opcję fragmentów z pakietu kompatybilności wsparcia, który działa z tą samą metodą 'getChildFragmentManager()'. – Luksprog

Odpowiedz

7

Layout dla Dialog - R.layout.view_with_plus

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/container" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context="com.util.me.TestActivity" 
    > 

    <TextView 
     android:id="@+id/text" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Details"/> 
    <fragment 
     android:layout_toRightOf="@+id/text" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/email" 
     class="com.util.me.test.PlusOneFragment" 
     android:layout_centerHorizontal="true"/> 

</RelativeLayout> 

Jak pokazuj okna

public void showDialog(View vIew){ 
    AlertDialog.Builder builder = new AlertDialog.Builder(this); 

    View view = this.getLayoutInflater().inflate(R.layout.view_with_plus, null); 
    builder.setView(view) 
      .setPositiveButton("OK", null) 
      .setNegativeButton("Cancel", null); 

    AlertDialog dialog = builder.create(); 
    dialog.show(); 
} 

Fragment w class = "com.util.me.test.PlusOneFragment" jest tylko PlusOneFragment generowane przez Android Studio.