我想知道如何(如果可能的话)在droid应用程序的单声道中创建模态弹出窗口。
场景:应用程序与客户托管的Web服务器进行通信(因此该位置将是客户与客户的不同)。要使用该应用程序,用户必须指定其Web服务器的连接字符串。因此,当应用程序启动并且它命中主活动时,我所做的第一项任务是检查设备应用程序设置中是否设置了连接字符串。如果不是,我想抛出一个简单的模态弹出窗口,允许用户指定与其服务器的连接。
我真的不想开始正常活动,因为用户可以点击后退按钮然后返回主菜单,应用程序处于无效状态,因为它不知道要与哪个服务器通信。
关于我如何解决这个问题的任何想法?
或者我应该构建活动链,以便在第一个活动中输入连接字符串,这样如果他们点击回来,它实际上会退出应用程序?
我有点困惑。
提前致谢
答案 0 :(得分:3)
这可以通过AlertDialog
实现。它可以使用列表,复选框,是/否按钮和自定义视图创建简单输入的对话框。
Xamarin Sample Repository中有一个示例用于不同类型的对话框,在底部您可以找到添加了用户名和密码字段的自定义视图的示例。
首先要定义要放在AlertDialog
中的自定义视图。 alert_dialog_connection_entry.xml
并且是Layout
:
在您的活动中的某处添加代码:
var connection_string_view = LayoutInflater.Inflate(Resource.Layout.alert_dialog_connection_entry, null);
var builder = new AlertDialog.Builder(this);
builder.SetTitle("Connection String");
builder.SetView(connection_string_view);
builder.SetPositiveButton("OK", OkClicked);
builder.SetNegativeButton("Cancel", CancelClicked);
builder.Create();
builder.Show();
为按钮添加一些处理程序:
private void CancelClicked(object sender, DialogClickEventArgs dialogClickEventArgs)
{
//Todo
}
private void OkClicked(object sender, DialogClickEventArgs dialogClickEventArgs)
{
var dialog = sender as AlertDialog;
if (null != dialog)
{
var connectionEdit = dialog.FindViewById(Resource.Id.connectionstring_edit) as EditText;
if (null != connectionEdit)
Console.WriteLine("Connection String: {0}", connectionEdit.Text);
}
}
那应该是它。您应该能够在对话框中放置任何类型的自定义视图。
答案 1 :(得分:0)
如果你只想显示一个模态弹出窗口,让用户放置他们的连接字符串,你可以试试这个。
首先,您需要有一个简单的布局来说明对话框的呈现方式。在这种情况下,TextView
显示类似“连接字符串:”和EditText
以让用户放置连接字符串可能就足够了。
然后,您可以将此代码放在MainActivity
中的某个位置,就像检查应用程序设置或类似内容一样。
var builder = new AlertDialog.Builder(this);
var view = LayoutInflater.Inflate(Resource.Layout.ModalDialog, null);
builder.SetView(view);
string connectionString = view.FindViewById<EditText>(Resource.Id.ConnectionString).Text;
AlertDialog alert = builder.Create();
alert.SetCancelable(false); //This prevents the dialog from being dismissed by either hit back button or hit out side of the dialog
alert.SetButton("OK", (s,e)=> ToDo(connectionString)); //Now you have the connection string, to do whatever you want.
alert.Show();
正如您所说,替代方案可能是允许用户在第一个屏幕中指定连接字符串。这也是一个很好的方法。我假设你知道怎么做,所以我没有在这里发布代码。