6

編譯我怎麼能顯示此:getSupportFragmentManager不上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(); 
    } 
} 

從裏面我FragmentViewPager

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

       } 
      }); 
} 
} 

我已經試過了好半天得到這個工作,但getSupportFragmentManager永遠不會解決...任何想法?

編輯:

,我覺得這是所有造成的支持FragmentManager VS的android.app.FragmentManager,但是我不知道如何解決這個問題,因爲我使用ViewPager從支持庫...

getSupportFragmentManager /和所有相關的getFragManager方法(如父類和子方法)總是從支持庫返回管理器,而show方法需要核心方法。

進口商品有:

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

如果我只是使用的核心,那麼getSupportFragmentManager()上不存在getActivity() ...

+0

你是什麼意思未解決?你有沒有任何堆棧跟蹤? – Snicolas

+0

@Snicolas它不編譯。你知道紅色的sqiggly線。 – sprocket12

+0

哈哈。哪裏?哪一行,突出顯示//罪魁禍首 – Snicolas

回答

12

你應該仔細檢查您的進口。您不能在支持庫和Android核心apis中使用Fragment & FragmentManager。

如果您使用支持,請使用支持(來自軟件包android.support.v4.app)的所有內容。如果沒有,請使用核心API包中的所有內容(android.app)。

+0

因此,使用支持庫中的Fragments&FragmentManager。 – Snicolas

+0

請參閱我的編輯。 – sprocket12

+1

問題解決。通過使我的DialogFragment也來自支持庫解決了不匹配問題。 – sprocket12

2

這是我在ViewPager中的Fragment中做的事情。顯示DialogFragment的代碼與以往任何時候都一樣。

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

編輯。

我想你可能會缺少* getActivity()。 * getSupportFragmentManager()

+0

no getFragmentManager從活動中返回一個。看到j​​avadoc。 – Snicolas

+0

然後,您需要確保您的Fragment和DialogFragment類都來自v4支持庫。 (和片段管理器) –

+0

你應該upvote我的答案如此;) – Snicolas

相關問題