嗨,我在android中有一个小应用程序,其中Im使用带有导航抽屉的片段作为菜单。 但是现在我想在用户单击某些内容时在片段对话框弹出窗口中显示,然后出现以下错误:
主要活动:
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()
解决方法:
HomeFragment必须扩展Fragment
您必须在需要的任何地方使用/导入android.support.v4.app.Fragment,android.support.v4.app.DialogFragment,android.support.v4.app.FragmentActivity。
newFragment.show(getActivity().getSupportFragmentManager(),"dialog");使用getsupportManager而不是FragmentManager()
使用FragmentManager fragmentManager = getSupportFragmentManager();而不是FragmentManager()
多数民众赞成在寻求帮助。
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
将鼠标移到闪烁的错误上,请在此处输入错误。
有错误:dropbox.com/s/yjswffvcfji0k24/notRecognizedFrag.PNG我发现了这一点您应该使用getActivity()。getSupportFragmentManager()如果仍然给您带来问题,那么请确保您的Activity扩展了FragmentActivity。但是我不能删除FragmentActivity,我扩展了Fragment
包含HomeActivity的活动必须扩展android.support.v4.app.FragmentActivity,HomeFragment必须扩展android.support.v4.app.Fragment和getActivity()返回一个Activity类型的实例,您必须将其强制转换为android.support.v4。 app.FragmentActivity可以对方法getSupportFragmentManager()具有可见性
好吧,我修复了它,我将在下面写文章如何为其他用户修复这些问题。