1

私の目標は、既存の AlertDialog に項目を永続的に追加することです。

AlertDialog の XML 配列は次のとおりです。

<array name="serverchoice">
    <item>@string/chicago_server</item>
    <item>@string/london_server</item>
    <item>@string/sanjose_server</item>
    <item>@string/washington_server</item>
    <item>@string/chicagoq_server</item>
    <item>@string/londonq_server</item>
    <item>@string/sanjoseq_server</item>
    <item>@string/washingtonq_server</item>
</array>

サーバーのリストであることがわかるように、事前に設定されたサーバーを使用するのではなく、ユーザーが独自のサーバーを追加できるようにしたいと考えています。

ユーザーがサーバーに入ることができるように、テキスト ボックスとボタンを含むページを作成しました。ユーザーが [サーバーの追加] ボタンをクリックすると、エントリがリストに追加されます。

現在、ユーザーが AlertDialog からメニュー項目を選択すると、次のように処理されます。

    // Choose Server method

    private void openServerDialog() {
        new AlertDialog.Builder(this)     
        .setTitle(R.string.server_title)  
        .setItems(R.array.serverchoice,   
                new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialoginterface,
                    int i) {
                setServer(i);   
            }
        })
        .show();
    }

private void setServer(int i) {   


        if (String.valueOf(i).equals("0")){
            CustomServer.setText("mcsord.visualware.com");
        }
        else if (String.valueOf(i).equals("1")){
            CustomServer.setText("mcslhr.visualware.com");
            }
        else if (String.valueOf(i).equals("2")){
            CustomServer.setText("mcssjc.visualware.com");
            }
        else if (String.valueOf(i).equals("3")){
            CustomServer.setText("mcsiad.visualware.com");
            }
        else if (String.valueOf(i).equals("4")){
            CustomServer.setText("qualitytestord.visualware.com");
            }
        else if (String.valueOf(i).equals("5")){
            CustomServer.setText("qualitytestlhr.visualware.com");
            }
        else if (String.valueOf(i).equals("6")){
            CustomServer.setText("qualitytestsjc.visualware.com");
            }
        else if (String.valueOf(i).equals("7")){
            CustomServer.setText("qualitytestiad.visualware.com");
            }

}

今やりたいことは、ユーザーが追加することを選択したときに別の永続的なアイテムを取得することだけです。これに関する私の最後の質問は十分に明確ではありませんでした。オプション メニューやコンテキスト メニューは必要ありません。

ありがとう

編集:

さらに調べてみると、配列リストに動的に追加することはできないと人々が言っ​​ていることがわかります。

現在、Androidフォン自体でメニューボタンが押されたときに表示されるオプションメニューがあります。そのために使用するコードは次のとおりです。

public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.settings_menu, menu);
        return true;
    }



    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle item selection
    switch (item.getItemId()) {
            case R.id.add_server:
                    addNewServer();
                return true;
            default:
                return super.onOptionsItemSelected(item);
        }
    }

別のオプション メニューを作成し、上記の AlertDialog の代わりにそれを使用することは可能ですか? または、リスト アイテムを動的に追加できないという同じ問題が発生します。

ユーザーが自分の URL を入力する機能はありますが、保存されません。毎回入力し続ける必要があります。

ありがとう

4

2 に答える 2

2

私はあなたの質問を理解したかどうか確信が持てません...しかし、私は答えようとします. まず、それらを拡張した後、alertDialog に動的に新しいオプションを追加できます。できないことは、それらを膨らませたところからxmlに新しい行を追加することです。

そうは言っても、アクティビティが終了したら新しいサーバーをどこかに保存して、後で復元できるようにする必要があります。これにはいくつかのオプションがありますが、最も簡単だと思われるものから始めます。

サーバーを共有設定ファイルに保存します。

保存例

    Editor editor = getSharedPreferences("FileName", MODE_PRIVATE).edit();
    editor.clear();
    editor.putString("server1", "serverName1");
    editor.putString("server2", "serverName2");
    editor.commit();

読み方の例:

    SharedPreferences preferences = getSharedPreferences("FileName", MODE_PRIVATE);
    preferences.getString("server1", "defaultValue");
    preferences.getString("server2", "defaultValue");

データベースを使用して値を格納することもできます。この場合、以前のソリューションのパフォーマンスが低下するため、数百のサーバーを含むリストがあると予想される場合は、これが適しています。

最後に、情報をファイルに保存することもできますが、それにはより多くのコードが必要になり、その真の利点はわかりません。

質問に答えていない場合は、お知らせください。幸運を。

于 2012-09-21T15:02:52.983 に答える
1

xml ファイルをデフォルトのままにしておくこともできますが、カスタム サーバーをデータベースに保存する必要があります。次に、両方のソースから単一の配列にプルして、それをダイアログに配置できます。

final CharSequence[] items = {"Red", "Green", "Blue"};

AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Pick a color");
builder.setItems(items, new DialogInterface.OnClickListener() {
    public void onClick(DialogInterface dialog, int item) {
        Toast.makeText(getApplicationContext(), items[item], Toast.LENGTH_SHORT).show();
    }
});
AlertDialog alert = builder.create();
于 2012-09-21T14:32:48.577 に答える