6

Jak mogę pokazać to:getSupportFragmentManager nie kompiluje na DialogFragment

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(); 
    } 
} 

Od wewnątrz mojego Fragment Wewnątrz 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"); 

       } 
      }); 
} 
} 

Próbowałem przez wieki, aby uzyskać to do pracy, ale getSupportFragmentManager nigdy nie został rozwiązany ... żadnych pomysłów?

EDIT:

czuję to wszystko jest spowodowane przez FragmentManager wsparcia kontra android.app.FragmentManager, jednak nie wiem, jak rozwiązać ten problem, ponieważ używam ViewPager z biblioteki wsparcia ...

getSupportFragmentManager/i wszystkie powiązane metody getFragManager, takie jak parent i child, zawsze zwracają menadżera z biblioteki wsparcia, przy czym metoda show chce rdzennego.

Imports to:

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... 

Gdybym po prostu użyć rdzenia, następnie getSupportFragmentManager() nie istnieje na getActivity() ...

+0

Co rozumiesz przez brak rozwiązania? Czy masz ślad stosu? – Snicolas

+0

@Snicolas to się nie kompiluje. Znasz czerwoną linię sqiggly. – sprocket12

+0

lol. Gdzie ? Której linii, podświetl // linka winowajcy – Snicolas

Odpowiedz

12

Należy dokładnie sprawdzić czy importu. Nie możesz użyć miksu Fragmentu & FragmentManager z biblioteki pomocy technicznej oraz z apisa z Androidem.

Jeśli korzystasz z pomocy technicznej, użyj wszystkiego, począwszy od wsparcia (z pakietu android.support.v4.app). Jeśli nie, użyj wszystkiego z pakietu core api (android.app).

+0

Używaj również Fragments & FragmentManager z biblioteki wsparcia. – Snicolas

+0

Proszę zobaczyć moje zmiany. – sprocket12

+1

Problem rozwiązany. Niezgodność została rozwiązana przez uczynienie mojego DialogFragment również pochodzić z biblioteki wsparcia. – sprocket12

2

Oto, co robię w moim Fragmentie, który jest w ViewPager. Kod pokazujący DialogFragment jest taki sam, gdziekolwiek byś to zrobił.

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"); 

EDYCJA.

Myślę, że być może brakuje Ci * getActivity(). * getSupportFragmentManager()

+0

no getFragmentManager zwraca ten z działania. Zobacz javadoc. – Snicolas

+0

Następnie należy upewnić się, że obie klasy Fragment i DialogFragment pochodzą z biblioteki obsługi v4. (i FragmentManager) –

+0

Powinieneś odpowiedzieć na moją odpowiedź;) – Snicolas