0

ユーザーがアイテムをコンテキスト メニューに追加できる機能を追加しようとしています。

現在、メニューの 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>

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

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

クリックしたときにメニュー項目を現在処理している方法は次のとおりです。

    // 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");
            }

}

次の質問は、新しいエントリをどのように処理するかです。

いずれにせよ、最初のステップは、新しいエントリをリストに追加することです。

どんな助けでも素晴らしいでしょう。

ありがとう

4

2 に答える 2

0

静的に作成したサーバーを保持する配列リソースにユーザーの入力を保存することはできません。ユーザーが入力したサーバーを、電話のメモリ、SQLiteデータベース、または共有設定(推奨)を使用して保存するファイルに保存する必要があります。[http://developer.android.com/guide/topics/data/data-storage.html]。

あなたの2番目の質問に答えて、私は別の全体的なアプローチをとったかもしれません。

アプリケーションのエントリポイントで、共有設定を使用してシステムをセットアップします

// Shared Preference string
public static final String PREFS = "SomeName";
// Editor to customize preferences
private Editor settingsEditor;
// Shared preference
private SharedPreferences prefs;
//list that will hold all the servers for the menu
private ArrayList<String> menuList = new ArrayList<String>();

onCreateメソッド(ユーザーが初めてアプリケーションを開いたとき)で、定義したサーバー名をシステムに配置します

prefs = getSharedPreferences(PREFS, MODE_PRIVATE);

// Get shared preferences and set up the preference editor
settingsEditor = prefs.edit();

// See if the app has been initialized
if (!prefs.getString("initialized", "").equals("yes")) {

settingsEditor.putString("server0","mcsord.visualware.com");
settingsEditor.putString("server1","mcslhr.visualware.com");   

//...do the above step to put the rest of them in
settingsEditor.putInt("menuItemsCount",8);
settingsEditor.putBoolean("initialized", true);
settingsEditor.commit();
}

その後、メニューリストにデータを入力します。

int i = prefs.getInt("menuItemCount", 0);
for(j = 0; j < i; j++)
     menuList.add(prefs.getString("sever" + j,"");

そして、ユーザーがページを開いた後、サーバー名を入力してボタンをクリックします。同じアクティビティにあるダイアログボックスの場合は、リストに追加し、別のアクティビティにある場合は共有設定を追加できます。 、送信してインテントし、onActivityResultメソッドをオーバーライドしてから、文字列をリストと共有設定に追加します。

onCreateContextMenuメソッドで、すべてのサーバーを含むリストをループして、それらをメニューに追加します。最後に、コードでこれを行うことができます

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

お役に立てれば。

于 2012-09-21T14:19:01.297 に答える
0

2 つの編集テキストを含むアラート ダイアログを作成します。1 つは名前用で、もう 1 つは URL 用です。次に、それを使用して新しいエントリを導入します。この例で述べたように

于 2012-09-21T13:41:11.413 に答える