【问题标题】:Incompatible types of fragment不兼容的片段类型
【发布时间】:2014-02-23 21:11:11
【问题描述】:

嗨,我在 android 中有一个小应用程序,我在其中使用带有导航抽屉的片段作为菜单。但是现在我想在用户点击某些东西时显示在我的片段对话框弹出窗口中,并且出现以下错误:

MainActivity:

private void displayView(int position) {
    // update the main content by replacing fragments
    Fragment fragment = null;
    switch (position) {
        case 0:
            fragment = new HomeFragment();
            break;
        case 1:
            fragment = new FindPeopleFragment();
            break;
        default:
            break;
    }

    if (fragment != null) {
        FragmentManager fragmentManager = getFragmentManager();
        fragmentManager.beginTransaction()
                .replace(R.id.frame_container, fragment).commit();

        // update selected item and title, then close the drawer
        mDrawerList.setItemChecked(position, true);
        mDrawerList.setSelection(position);
        setTitle(navMenuTitles[position]);
        mDrawerLayout.closeDrawer(mDrawerList);
    } else {
        // error in creating fragment
        Log.e("MainActivity", "Error in creating fragment");
    }
}

我在 fragment = new HomeFragment(); >>不兼容的类型上遇到的第一个错误。

onCreateView 方法 >> 方法的第二个错误 HomeFragment 没有覆盖或实现超类型中的方法

HomeFragment:

public class HomeFragment extends FragmentActivity {

public HomeFragment(){}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {

    View rootView = inflater.inflate(R.layout.fragment_home, container, false);
    final RelativeLayout rlPolievkaShowDialog=(RelativeLayout)rootView.findViewById(R.id.rlPolievkaButton);
    rlPolievkaShowDialog.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
        }

    });
    return rootView;
}

private void showDialog() {
    DialogFragment newFragment = DialogFragmentAlergeny.newInstance();
    newFragment.show(getSupportFragmentManager(), "dialog");
}

}

DialogFragmentAlergeny:

public class DialogFragmentAlergeny extends DialogFragment {

public static DialogFragmentAlergeny newInstance() {
    DialogFragmentAlergeny frag = new DialogFragmentAlergeny();
    return frag;
}

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(getActivity());
    View view = getActivity().getLayoutInflater().inflate(R.layout.alergeny_dialog, null);
    alertDialogBuilder.setView(view);
    alertDialogBuilder.setTitle(getString(R.string.alergeny_dialog_title));
    alertDialogBuilder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
    dialog.dismiss();
        }
    });
    return alertDialogBuilder.create();
}

}

【问题讨论】:

  • HomeFragment 不是一个片段,而是一个 FragmentActivity...更改将类扩展为 Fragment
  • @phemt.latd 发表您的评论作为答案(也许您可以添加更多上下文)
  • 是的,我也尝试过这个选项,但是当扩展 Fragment 时,方法 getSupportFragmentManager() 无法识别

标签: android android-fragments android-dialogfragment incomplete-type


【解决方案1】:

如何解决:

  1. HomeFragment 必须扩展 Fragment
  2. 您必须在任何需要的地方使用/导入android.support.v4.app.Fragmentandroid.support.v4.app.DialogFragmentandroid.support.v4.app.FragmentActivity
  3. newFragment.show(getActivity().getSupportFragmentManager(), "dialog"); 使用 getsupportManager 而不是 FragmentManager()
  4. 使用FragmentManager fragmentManager = getSupportFragmentManager(); 而不是FragmentManager()

这就是所有的帮助。

【讨论】:

    【解决方案2】:

    HomeFragment 不是一个片段,而是一个 FragmentActivity...更改将类扩展为 Fragment

    public class HomeFragment extends FragmentActivity { ... }
    

    【讨论】:

    • es 我也尝试过这个选项,但是当扩展 Fragment 时 getSupportFragmentManager() 方法无法识别
    • 您可以使用 'getActivity().getSupportFragmentManager()' android 开发者指南指定 FragmentManager:与 Activity 内部的 Fragment 对象交互的接口
    • 很抱歉,但仍然无法识别。它看起来像方法 newFragmen.show(getActivity().getSupportFragmentManager(),"dialog");有这个问题。我也尝试过 getActivity().getFragmentManager() 但也不起作用。这里是 scr:dropbox.com/s/9y2qtoiy66ubttr/fragmentNotRecognized.PNG
    • 包含 HomeActivity 的 Activity 必须扩展 android.support.v4.app.FragmentActivity HomeFragment 必须扩展 android.support.v4.app.Fragment 和 getActivity() 返回一个 Activity 类型的实例,您必须将其转换为 android.support .v4.app.FragmentActivity 可以查看方法 getSupportFragmentManager()
    • OK thx 我修好了我会在下面写帖子如何为其他用户解决这些问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-20
    • 1970-01-01
    • 2019-11-16
    相关资源
    最近更新 更多