Android Fragment getActivity() 中的 AlertDialog Builder 不工作
Android AlertDialog Builder in a Fragment getActivity() not work
我尝试在 Fragment 中构建 AlertDialog,但找不到适合 AlertDialog Builder 的上下文。
public class LoginFragment extends Fragment {
public LoginFragment() {
// Required empty public constructor
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_login, container, false);
Button btnEnter = (Button) rootView.findViewById(R.id.btnEnter);
// Listening to register new account link
btnEnter.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// if play name already exists
AlertDialog dialog = new AlertDialog.Builder(getActivity())
.setCancelable(false)
.setIcon(R.drawable.login_icon)
.setMessage("Player Name Already Exists. Please Find a New Name.")
.setButton("Okay", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
}).show();
}
});
return rootView;
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
}
@Override
public void onDetach() {
super.onDetach();
}
}
这一行:
AlertDialog dialog = new AlertDialog.Builder(getActivity());
getActivity() 无效。它说 "require AlertDialog, found AlertDialog.Builder"。我试过 this.getActivity() 和 getContext() 以及 getSupportFragmentManager() 之类的东西,但都没有用。我对此有点困惑。谁能告诉我应该使用哪个以及为什么?
AlertDialog dialog = new AlertDialog.Builder(getActivity());
应替换为
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
这是自定义对话框,您可以随意编辑它。
在片段中使用对话框的示例:
AlertDialog.Builder makeDialog = new AlertDialog.Builder(getActivity());
LayoutInflater li = getLayoutInflater(null);
View viewAdd = li.inflate(R.layout.random_dialog, null);
makeDialog.setView(viewAdd);
//editexts,textviews and that stuff goes here
makeDialog.setPositiveButton("Save", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
});
makeDialog.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
AlertDialog ad = makeDialog.create();
ad.show();
我尝试在 Fragment 中构建 AlertDialog,但找不到适合 AlertDialog Builder 的上下文。
public class LoginFragment extends Fragment {
public LoginFragment() {
// Required empty public constructor
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_login, container, false);
Button btnEnter = (Button) rootView.findViewById(R.id.btnEnter);
// Listening to register new account link
btnEnter.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// if play name already exists
AlertDialog dialog = new AlertDialog.Builder(getActivity())
.setCancelable(false)
.setIcon(R.drawable.login_icon)
.setMessage("Player Name Already Exists. Please Find a New Name.")
.setButton("Okay", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
}).show();
}
});
return rootView;
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
}
@Override
public void onDetach() {
super.onDetach();
}
}
这一行:
AlertDialog dialog = new AlertDialog.Builder(getActivity());
getActivity() 无效。它说 "require AlertDialog, found AlertDialog.Builder"。我试过 this.getActivity() 和 getContext() 以及 getSupportFragmentManager() 之类的东西,但都没有用。我对此有点困惑。谁能告诉我应该使用哪个以及为什么?
AlertDialog dialog = new AlertDialog.Builder(getActivity());
应替换为
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
这是自定义对话框,您可以随意编辑它。
在片段中使用对话框的示例:
AlertDialog.Builder makeDialog = new AlertDialog.Builder(getActivity());
LayoutInflater li = getLayoutInflater(null);
View viewAdd = li.inflate(R.layout.random_dialog, null);
makeDialog.setView(viewAdd);
//editexts,textviews and that stuff goes here
makeDialog.setPositiveButton("Save", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
});
makeDialog.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
AlertDialog ad = makeDialog.create();
ad.show();