我该如何显示:
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方法(例如父级和子级)总是从支持库返回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()
... 最佳答案
您应该仔细检查您的进口。您不能同时使用支持库和android核心api中的Fragment&FragmentManager。
如果使用支持,请使用支持中的所有内容(来自android.support.v4.app
包)。如果没有,请使用核心api包(android.app
)中的所有内容。