6

Wie kann ich zeigen dies:getSupportFragmentManager nicht auf DialogFragment nicht kompiliert

public class TagsDialog extends DialogFragment 
{ 
    @Override 
    public Dialog onCreateDialog(Bundle savedInstanceState) 
    { 
     AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 
     LayoutInflater inflater = getActivity().getLayoutInflater(); 
     builder.setView(inflater.inflate(R.layout.tags_dialog, null)); 
     builder.setMessage("This is a message").setTitle("TAGS"); 
     return builder.create(); 
    } 
} 

aus meinem Fragment innen ein ViewPager:

public class MyFragment extends Fragment 
    { 
     @Override 
     public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
     { 

    ... 

      ImageView btnTags = (ImageView)view.findViewById(R.id.btnTags); 
      btnTags.setOnClickListener(new View.OnClickListener() 
      { 
       @Override 
       public void onClick(View view) 
       { 

        DialogFragment dlg = new TagsDialog(); 
        //this line doesn't compile 
        dlg.show(getSupportFragmentManager(), "tags"); 

       } 
      }); 
} 
} 

ich seit Jahren versucht haben, diese, zur Arbeit zu kommen, aber getSupportFragmentManager wird nie gelöst ... irgendwelche Ideen?

EDIT:

Ich fühle mich dies alles durch die Unterstützung FragmentManager gegen die android.app.FragmentManager verursacht wird, aber ich weiß nicht, wie dieses Problem zu lösen, wie ich die ViewPager von der Support-Bibliothek bin mit ...

getSupportFragmentManager/und alle verwandten getFragManager-Methoden wie parent und child gibt immer den Manager von der support-lib zurück, während die show-Methode den Kern will.

Importe sind:

import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentManager; 

FragmentManager fm = getActivity().getSupportFragmentManager(); // returns from support lib 
DialogFragment dlg = new TagsDialog(); 
dlg.show(fm, "tags"); // wants core... 

Wenn ich Kern nur verwenden, dann getSupportFragmentManager() existiert nicht auf getActivity() ...

+0

Was meinst du mit nicht gelöst? Hast du Stack-Spuren? – Snicolas

+0

@Snicolas es kompiliert nicht. Sie wissen, rote sqiggly Linie. – sprocket12

+0

lol. Woher ? Welche Zeile, Highlight // die Täterzeile – Snicolas

Antwort

12

Sie sollten Ihre Importe verdoppeln überprüfen. Sie können eine Mischung aus Fragment & FragmentManager aus der Support-Bibliothek und von Android Core Apis nicht verwenden.

Wenn Sie Unterstützung verwenden, verwenden Sie alles vom Support (aus Paket android.support.v4.app). Wenn nicht, verwenden Sie alles aus dem Core-API-Paket (android.app).

+0

Verwenden Sie also auch Fragments & FragmentManager aus der Support-Bibliothek. – Snicolas

+0

Bitte sehen Sie meine Änderungen. – sprocket12

+1

Problem gelöst. Die fehlende Übereinstimmung wurde dadurch gelöst, dass mein DialogFragment auch von der Support-Bibliothek kam. – sprocket12

2

Hier ist was ich in meinem Fragment mache, das in einem ViewPager ist. Der Code zum Anzeigen eines DialogFragments ist derselbe, wo auch immer Sie es tun würden.

FragmentManager fm = getActivity().getSupportFragmentManager(); 
ConfirmDeleteDialog dialog = new ConfirmDeleteDialog(); 
dialog.setTargetFragment(RecipeFragment.this, REQUEST_CONFIRM_RC); 
Bundle b = new Bundle(); 
b.putString(ConfirmDeleteDialog.EXTRA_CONFIRM_DIALOG_TYPE, 
     ConfirmDeleteDialog.CONFIRM_DIALOG_TYPE.COMMIT.name()); // enum determines what to display 
dialog.setArguments(b); 
dialog.show(fm, "confirm delete"); 

BEARBEITEN.

Ich denke, Sie können die * getActivity() fehlen. * getSupportFragmentManager()

+0

kein getFragmentManager gibt den einen aus der Aktivität zurück. Sieh dir das Javadoc an. – Snicolas

+0

Dann müssen Sie sicherstellen, dass Ihre Fragment- und DialogFragment-Klassen aus der v4-Unterstützungsbibliothek stammen. (und FragmentManager) –

+0

Sie sollten meine Antwort so upvote;) – Snicolas

Verwandte Themen