Я поместил кнопку в свой макет диалога, чтобы запустить полную перерисовку Диалога.Тем не менее, кажется, что вы не можете открывать диалоги изнутри onCreateDialog, и я не могу найти способ закрыть диалоги без использования setPositiveButton
и т. П., Поскольку это единственное переопределение кнопки, которое дает диалог в качестве параметра (и яне могу найти способ получить его для кнопки, которая является частью макета).вот весь соответствующий код:
case DIALOG_WIFI_PREF:
{
Dialog dialog = new Dialog(this);
final View dialogLayout = inflater.inflate(R.layout.dialog_wifi_pref, null);
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setView(dialogLayout);
builder.setTitle("IP Configuration");
final EditText ipIn = (EditText)dialogLayout.findViewById(R.id.wifi_ip_in);
final EditText portIn = (EditText)dialogLayout.findViewById(R.id.wifi_port_in);
final EditText labelIn = (EditText)dialogLayout.findViewById(R.id.site_label_in);
final EditText codeIn = (EditText)dialogLayout.findViewById(R.id.activation_code);
final Spinner siteSpn = (Spinner)dialogLayout.findViewById(R.id.site_spn);
final Button deleteBtn = (Button)dialogLayout.findViewById(R.id.delete_btn);
final Cursor cur = mDb.rawQuery("SELECT * FROM " + DbSchema.SiteSchema.TABLE_NAME, null);
cur.moveToFirst();
final SimpleCursorAdapter tempAdapter = new SimpleCursorAdapter(
this,
android.R.layout.simple_spinner_item,
cur,
new String[] { DbSchema.SiteSchema.COLUMN_LABEL },
new int[] { android.R.id.text1 }
);
tempAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
siteSpn.setAdapter(tempAdapter);
//fill the initial values
String initSite = pref.getString("site_id", "New Site");
String spnLabel = null;
final Cursor initCur = mDb.query(DbSchema.SiteSchema.TABLE_NAME, null, DbSchema.SiteSchema.COLUMN_LABEL + "=?", new String[] { initSite }, null, null, null);
initCur.moveToFirst();
cur.moveToFirst();
if(initCur.getCount()>0) {
ipIn.setText(initCur.getString(initCur.getColumnIndex(DbSchema.SiteSchema.COLUMN_IP)));
portIn.setText(initCur.getString(initCur.getColumnIndex(DbSchema.SiteSchema.COLUMN_PORT)));
codeIn.setText(initCur.getString(initCur.getColumnIndex(DbSchema.SiteSchema.COLUMN_ACTIVATION_CODE)));
spnLabel = initCur.getString(initCur.getColumnIndex(DbSchema.SiteSchema.COLUMN_LABEL));
labelIn.setText(spnLabel);
if(cur.getCount()>0) {
do {
if(spnLabel.equals(cur.getString(cur.getColumnIndex(DbSchema.SiteSchema.COLUMN_LABEL)))) {
siteSpn.setSelection(cur.getPosition());
}
} while(cur.moveToNext());
}
}
siteSpn.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
cur.moveToFirst();
if(cur.getCount()>0) {
do {
String tempLabel = cur.getString(cur.getColumnIndex(DbSchema.SiteSchema.COLUMN_LABEL));
if(tempLabel.equals(((TextView)view.findViewById(android.R.id.text1)).getText().toString())) {
labelIn.setText(tempLabel);
portIn.setText(cur.getString(cur.getColumnIndex(DbSchema.SiteSchema.COLUMN_PORT)));
ipIn.setText(cur.getString(cur.getColumnIndex(DbSchema.SiteSchema.COLUMN_IP)));
codeIn.setText(cur.getString(cur.getColumnIndex(DbSchema.SiteSchema.COLUMN_ACTIVATION_CODE)));
}
} while(cur.moveToNext());
}
}
public void onNothingSelected(AdapterView<?> parent) {
//
}
});
deleteBtn.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
//do things
cur.moveToFirst();
while(cur.moveToNext()) {
String tempLabel = cur.getString(cur.getColumnIndex(DbSchema.SiteSchema.COLUMN_LABEL));
View selectedSiteView = siteSpn.getSelectedView();
String label = ((TextView)selectedSiteView.findViewById(android.R.id.text1)).getText().toString();
if(tempLabel.equals(label)) {
mDb.delete(DbSchema.SiteSchema.TABLE_NAME, DbSchema.SiteSchema.COLUMN_LABEL+"=?", new String[] { label });
//dialogLayout.invalidate();
//dialog.dismiss();
//dialog.invalidate();
//v.getParent().invalidate();
}
}
}
});
builder.setPositiveButton("Save", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
cur.moveToFirst();
boolean newRecord = true;
do {
String tempLabel = null;
if(cur.getCount()>0) {
tempLabel = cur.getString(cur.getColumnIndex(DbSchema.SiteSchema.COLUMN_LABEL));
}
if(tempLabel!=null && tempLabel.equals(labelIn.getText().toString())) {
//update
ContentValues cv = new ContentValues();
cv.put(DbSchema.SiteSchema.COLUMN_IP, ipIn.getText().toString());
cv.put(DbSchema.SiteSchema.COLUMN_PORT, portIn.getText().toString());
cv.put(DbSchema.SiteSchema.COLUMN_ACTIVATION_CODE, codeIn.getText().toString());
MobileDashboardActivity.this.mDb.update(DbSchema.SiteSchema.TABLE_NAME, cv, DbSchema.SiteSchema.COLUMN_LABEL+"=?", new String[] { tempLabel });
newRecord = false;
break;
}
} while(cur.moveToNext());
if(newRecord) {
//new entry
ContentValues cv = new ContentValues();
cv.put(DbSchema.SiteSchema.COLUMN_IP, ipIn.getText().toString());
cv.put(DbSchema.SiteSchema.COLUMN_PORT, portIn.getText().toString());
cv.put(DbSchema.SiteSchema.COLUMN_LABEL, labelIn.getText().toString());
cv.put(DbSchema.SiteSchema.COLUMN_ACTIVATION_CODE, codeIn.getText().toString());
MobileDashboardActivity.this.mDb.insert(DbSchema.SiteSchema.TABLE_NAME, null, cv);
}
SharedPreferences.Editor editor = pref.edit();
editor.putString("site_id", labelIn.getText().toString());
editor.putString("activation", codeIn.getText().toString());
editor.commit();
MobileDashboardActivity.this.writeCSVFile("dashboard_settings.csv");
dialog.dismiss();
}
});
builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
}
});
dialog = builder.create();
return dialog;
}