【问题标题】:How to call dialogfragment from another fragment?如何从另一个片段调用对话框片段?
【发布时间】:2017-06-09 00:03:34
【问题描述】:

我是android开发的新手,希望你们能帮助我解决我的问题。我已经搜索过任何解决方案,但没有一个有效。 我有 6 个可滚动标签的片段,然后每个标签都有添加到购物车按钮,如果我单击该按钮,应该会出现一个片段对话框。就我而言,有这个错误。

错误:(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 中

顺便说一下,这是我的输出。

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

【问题讨论】:

标签: java android android-alertdialog


【解决方案1】:

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

类型不匹配

您的 dialogFragment 有 android.app.FragmentManager,而您正在调用 android.support.v4.app.FragmentManager。你应该使用getSupportFragmentManger() insted of 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");

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • _我将如何修改我的 CartFragment 以支持库片段?
    • 在CartFragment.java 中将import android.app.DialogFragment; 替换为import android.support.v4.app.DialogFragment;
    【解决方案3】:

    版本不匹配。不要使用 getFragmentManager(),而是使用 getSupportFragmentManager(),因为您正在使用 Fragments 的支持库版本。

    替换

    FragmentManager manager = getFragmentManager();
    

    与

    FragmentManager manager = getSupportFragmentManager();
    

    【讨论】:

    • _如果我把它改成那个,它会变成另一个错误 Error:(37, 13) error: no suitable method found for 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)
    猜你喜欢
    • 2015-05-05
    • 1970-01-01
    • 2013-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多