我该如何展示:
public class TagsDialog extends DialogFragment
{
@Override
public Dialog onCreateDialog(Bundle savedInstanceState)
{
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
LayoutInflater inflater = getActivity().getLayoutInflater();
builder.setView(inflater.inflate(R.layout.tags_dialog, null));
builder.setMessage("This is a message").setTitle("TAGS");
return builder.create();
}
}
来自Fragment
内的ViewPager
内部:
public class MyFragment extends Fragment
{
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
...
ImageView btnTags = (ImageView)view.findViewById(R.id.btnTags);
btnTags.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View view)
{
DialogFragment dlg = new TagsDialog();
//this line doesn't compile
dlg.show(getSupportFragmentManager(), "tags");
}
});
}
}
我已经尝试了很长时间才能让它发挥作用,但getSupportFragmentManager
永远不会被解决......任何想法?
修改
我觉得这都是由支持FragmentManager和android.app.FragmentManager引起的,但我不知道如何解决这个问题,因为我正在使用支持库中的ViewPager ...
getSupportFragmentManager /以及所有相关的getFragManager方法(如父级和子级)始终从支持lib返回Manager,而show方法需要核心方法。
进口是:
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
FragmentManager fm = getActivity().getSupportFragmentManager(); // returns from support lib
DialogFragment dlg = new TagsDialog();
dlg.show(fm, "tags"); // wants core...
如果我只使用核心,那么getSupportFragmentManager()
上就不存在getActivity()
...
答案 0 :(得分:14)
你应该仔细检查你的进口。你不能混合使用Fragment&来自支持库和android core apis的FragmentManager。
如果您使用支持,请使用支持中的所有内容(来自包android.support.v4.app
)。如果没有,请使用核心api包(android.app
)中的所有内容。
答案 1 :(得分:2)
以下是我在ViewPager中的Fragment中所做的事情。显示DialogFragment的代码与您可以执行的操作相同。
FragmentManager fm = getActivity().getSupportFragmentManager();
ConfirmDeleteDialog dialog = new ConfirmDeleteDialog();
dialog.setTargetFragment(RecipeFragment.this, REQUEST_CONFIRM_RC);
Bundle b = new Bundle();
b.putString(ConfirmDeleteDialog.EXTRA_CONFIRM_DIALOG_TYPE,
ConfirmDeleteDialog.CONFIRM_DIALOG_TYPE.COMMIT.name()); // enum determines what to display
dialog.setArguments(b);
dialog.show(fm, "confirm delete");
EDIT。
我想你可能会错过* getActivity()。 * getSupportFragmentManager()