简体   繁体   English

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

[英]How to call dialogfragment from another fragment?

I'm really new in android development, hope you guys can help me in my problem. 我真的是android开发的新手,希望你们能为我解决问题。 I had already search for any solution but none of it works. 我已经在寻找任何解决方案,但是都没有用。 I have 6 fragments for scrollable tabs, then each tabs has ADD TO CART buttons, if I click that button a fragment dialog should appear. 我有6个可滚动选项卡的片段,然后每个选项卡都有“添加到购物车”按钮,如果单击该按钮,则会出现一个片段对话框。 In my case, there is this error. 就我而言,有这个错误。

Error:(37, 13) error: no suitable method found for show(android.support.v4.app.FragmentManager,String) method DialogFragment.show(android.app.FragmentManager,String) is not applicable (argument mismatch; android.support.v4.app.FragmentManager cannot be converted to android.app.FragmentManager) method DialogFragment.show(FragmentTransaction,String) is not applicable (argument mismatch; android.support.v4.app.FragmentManager cannot be converted to FragmentTransaction) 错误:(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)

Heres my code by the way for the fragment to call the DialogFragment. 顺便说一句,我的代码是片段调用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");
}

}

This the code for DialogFragment to be called by OneFragment 这是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);
}
}

Seems like the error is in the OneFragment.java 好像错误在OneFragment.java中

Heres my output by the way. 顺便说一下,这是我的输出。 这是调用对话框的片段

这应该是对话

_I really appreciate for any answers, just please be nice to me .I really don't know how to do it . _我真的很感谢您的回答,请对我好一点。我真的不知道该怎么做。 :( .Thanks :) :( 。谢谢 :)

your error says your answer clearly. 您的错误清楚地说明了您的答案。

type mismatch 类型不匹配

your dialogFragment has android.app.FragmentManager and you are calling android.support.v4.app.FragmentManager . 您的dialogFragment具有android.app.FragmentManager并且您正在调用android.support.v4.app.FragmentManager you should use getSupportFragmentManger() insted of getFragmentManager(); 您应该使用由getFragmentManager(); getSupportFragmentManger() getFragmentManager();

first of all replace your cartFragment import to this, 首先将您的cartFragment导入替换为此,

import android.support.v4.app.DialogFragment;

and create this method. 并创建此方法。

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

and in your one_fragment use like this. 并在你的one_fragment中这样使用。

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

There is a version mismatch. 版本不匹配。 Instead of using getFragmentManager(), use getSupportFragmentManager() as you are using the support library version of Fragments. 在使用Fragments的支持库版本时,请使用getSupportFragmentManager()而不是使用getFragmentManager()。

Replace 更换

FragmentManager manager = getFragmentManager();

with

FragmentManager manager = getSupportFragmentManager();

your OneFragment belongs to support library fragment while CartFragment doesn't. 您的OneFragment属于支持库片段,而CartFragment不属于。 you need to either modify CartFragment to support library or OneFragment to default Fragment. 您需要将CartFragment修改为支持库,或者将OneFragment修改为默认的Fragment。 and modifying CartFragment to support library fragment will be better as support library has more functionality. 修改CartFragment以支持库片段会更好,因为支持库具有更多功能。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM