当用户将无效数据输入搜索字段时,我试图显示一个对话框。包含输入验证的搜索操作都在AsyncTask
的{{1}}中进行。 Dialog创建者位于Main活动之外的外部类中。
我得到Main Activity
并检查它是否没有结果。如果没有结果,那么我想通过对话框让用户知道。这是在我的主要内容JSON Array
。
Activity
这是我的try{
results = jSon.getJSONArray(TAG_RESULTS);
Log.d("results as string", results.toString());
String strResults = results.toString();
if(!strResults.equals("[]")){
for(int i = 0; i < results.length(); i++){
JSONObject r = results.getJSONObject(i);
firstID = r.getString(TAG_ID);
}
}
else{
DialogFragment newFragment = new NoResult();
newFragment.show(getFragmentManager(), "noresult");
}
}
catch(JSONException e){
Log.e("Error", e.toString());
}
创建者
Dialog
即使结果等于[],app也会运行剩下的代码并组装一个无效的api查询URL。 public class NoResult extends DialogFragment {
public void customCreate(final Context context){
AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setMessage(R.string.no_result)
.setPositiveButton(R.string.back_to_one, DialogInterface.OnClickListener(){
public void onClick(DialogInterface dialog, int d){
//Try Again
Intent intent = new Intent(context, Main.class);
context.startActivity(intent);
}
});
};
}
告诉我应用程序在显示结果活动时崩溃,这是由于api查询中的错误导致的最后一步。
这是在找到无效输入后对话框无法显示后查询的链接:http://api.themoviedb.org/3/person/null/credits?api_key=apikey
null 应该是 ID号,但这不是因为搜索仍在使用无效数据运行if else应该捕获它。
logcat的:
logcat
答案 0 :(得分:0)
这是
private void showDialog() {
AlertDialog.Builder alertBuilder = new AlertDialog.Builder(
YourActivity.this);
SpannableStringBuilder title = new SpannableStringBuilder(
getString(R.string.log_in));
title.setSpan(Constants.SPAN, 0, title.length(),
Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
SpannableStringBuilder spanMsg = new SpannableStringBuilder(
getString(R.string.config_manual_sync_msg));
spanMsg.setSpan(Constants.SPAN, 0, spanMsg.length(),
Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
alertBuilder.setTitle(title);
alertBuilder.setIcon(R.drawable.launcher_icon);
alertBuilder.setMessage(spanMsg);
alertBuilder.setPositiveButton("Yes",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Log.i(TAG, "Yes clicked");
dialog.cancel();
Perform action
}
});
alertBuilder.setNegativeButton("No",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
Log.i(TAG, "canceled");
}
});
AlertDialog alertDialog = alertBuilder.create();
alertDialog.show();
}
答案 1 :(得分:0)
如果您想使用DialogFragment
,则需要覆盖onCreateView或onCreateDialog
这是文档说的
实现应覆盖此类并实现 onCreateView(LayoutInflater,ViewGroup,Bundle)以提供对话框的内容。或者,他们可以覆盖 onCreateDialog(Bundle)来创建一个完全自定义的对话框,例如AlertDialog,它有自己的内容。
请参阅文档here