2

我想知道如何(如果可能的话)在单声道中为 droid 应用程序创建一个模态弹出窗口。

场景:应用程序与客户托管的 Web 服务器进行通信(因此该位置将因客户而异)。要使用该应用程序,用户必须指定其 Web 服务器的连接字符串。因此,当应用程序启动并遇到主要活动时,我要做的第一个任务是检查设备应用程序设置中是否设置了连接字符串。如果不是,我想抛出一个简单的模式弹出窗口,允许用户指定与其服务器的连接。

我真的不想开始正常的活动,因为用户将能够单击后退按钮并返回主菜单,并且应用程序处于无效状态,因为它不知道要与哪个服务器通信。

关于我如何解决这个问题的任何想法?

或者我应该构建活动链,以便在第一个活动中输入连接字符串,以便如果他们点击返回,它实际上会退出应用程序?

我有点困惑。

提前致谢

4

2 回答 2

3

这是可能的AlertDialog。它可以使用列表、复选框、是/否按钮和自定义视图创建简单输入对话框。

Xamarin Sample Repository中有一个用于不同类型对话框的示例,在底部您可以找到一个添加了包含用户名和密码字段的自定义视图的示例。

所以首先定义你想要放入的自定义视图AlertDialogalert_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);
    }
}

应该是这样的。您应该能够在对话框中放置任何类型的自定义视图。

于 2013-01-18T00:21:52.513 回答
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();

正如您所说,替代方法可能是允许用户在第一个屏幕中指定连接字符串。这也是一个很好的方法。我假设你知道怎么做,所以我没有在这里发布代码。

于 2013-01-18T00:16:09.450 回答