如何从另一个片段调用dialogfragment?

时间:2017-01-24 09:02:03

标签: java android alertdialog

我在android开发方面真的很新,希望你们能解决我的问题。我已经搜索过任何解决方案,但没有一个可行。 我有6个片段用于可滚动标签,然后每个标签都有ADD TO CART按钮,如果我点击该按钮就会出现一个片段对话框。在我的情况下,有这个错误。

  

错误:(37,13)错误:找不到合适的show方法(android.support.v4.app.FragmentManager,String)   方法DialogFragment.show(android.app.FragmentManager,String)不适用   (参数不匹配; android.support.v4.app.FragmentManager无法转换为android.app.FragmentManager)   方法DialogFragment.show(FragmentTransaction,String)不适用   (参数不匹配; android.support.v4.app.FragmentManager无法转换为FragmentTransaction)

顺便提一下我的代码片段来调用DialogFragment。

package info.androidhive.materialtabs.fragments;

    import android.app.DialogFragment;
    import android.os.Bundle;
    import android.support.v4.app.Fragment;
    import android.support.v4.app.FragmentActivity;
    import android.support.v4.app.FragmentManager;
    import android.support.v4.app.FragmentTransaction;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;

    import info.androidhive.materialtabs.R;


public class OneFragment extends Fragment{

public OneFragment() {
    // Required empty public constructor
}

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

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    return inflater.inflate(R.layout.fragment_one, container, false);
}

public void toDiagCartFragment(View v){
    FragmentManager manager = getFragmentManager();
    CartFragment cart = new CartFragment();
    cart.show(manager, "My Cart");
}

}

这是OneFragment调用DialogFragment的代码

package info.androidhive.materialtabs.fragments;

  import android.app.DialogFragment;
  import android.os.Bundle;
  import android.support.annotation.Nullable;
  import android.support.v4.app.Fragment;
  import android.support.v4.app.FragmentActivity;
  import android.support.v4.app.FragmentManager;
  import android.support.v4.app.FragmentTransaction;
  import android.view.LayoutInflater;
  import android.view.View;
  import android.view.ViewGroup;

  import info.androidhive.materialtabs.R;


 public class CartFragment extends DialogFragment{

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    return inflater.inflate(R.layout.fragment_cart2, null);
}
}

似乎错误发生在OneFragment.java

顺便提一下我的输出。 This is the fragment to call the dialog

This is suppose to be the dialog

_我真的很感激任何答案,请对我好 我真的不知道怎么做。 :( 谢谢:)

3 个答案:

答案 0 :(得分:1)

你的错误清楚地说明了你的答案。

  

类型不匹配

您的dialogFragment已android.app.FragmentManager,您正在呼叫android.support.v4.app.FragmentManager。您应该使用getSupportFragmentManger()

getFragmentManager();内容

首先将cartFragment导入替换为

import android.support.v4.app.DialogFragment;

并创建此方法。

public static CartFragment newInstance() {
        CartFragment dialog = new CartFragment ();
        return dialog;
    }

并在你的one_fragment中使用这样的。

FragmentTransaction ft = getSupportFragmentManager().beginTransaction();            
CartFragment newFragment = CartFragment .newInstance();
newFragment.show(ft, "My Cart");

答案 1 :(得分:0)

版本不匹配。当您使用片段的支持库版本时,请使用getSupportFragmentManager(),而不是使用getFragmentManager()。

替换

FragmentManager manager = getFragmentManager();

FragmentManager manager = getSupportFragmentManager();

答案 2 :(得分:0)

您的OneFragment属于支持库片段而CartFragment没有。您需要修改CartFragment以支持库,或OneFragment修改默认片段。并且修改CartFragment以支持库片段将会更好,因为支持库具有更多功能。

相关问题