2012-09-21 2 views
0

사용자가 상황에 맞는 메뉴에 항목을 추가하는 기능을 추가하려고합니다.사용자가 Android의 메뉴에 항목을 추가하도록 허용 하시겠습니까?

메뉴에 대한 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> 

, 나는 사용자가를 사용하는 것보다 자신의 서버를 대신 추가 할 수 있도록하고 싶습니다 프리셋 서버.

사용자가 서버를 입력 할 수 있도록 텍스트 상자와 버튼이있는 페이지를 만들었습니다. 사용자가 Add Server 단추를 클릭하면 항목이 목록에 추가됩니다.

클릭 할 때 현재 메뉴 항목을 처리하고 있습니다 방법은 다음과 같습니다 :

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

} 

그래서 나의 다음 질문은 내가 다음 새 항목을 처리 할 방법이다.

어느 쪽이든 첫 번째 단계는 새 항목을 목록에 추가하는 것입니다.

도움이 될 것입니다.

감사

+0

[이 답변] (http://stackoverflow.com/questions/5375645/android-add-a-menu-item-at-runtime)이 (가) –

+0

@manojKumar이 모든 예제가 생성에 도움이 될 것이라고 생각합니다. 옵션 메뉴가 아니라 옵션 메뉴가 아닌 alertdialog를 사용하고 있습니다. 내가보고 있어야하는 다른 곳이 있습니까? 정보를 주셔서 감사합니다 –

답변

0

정적으로 만든 서버를 보유하고있는 배열 리소스에 사용자의 입력을 저장할 수 없습니다. 사용자가 입력 한 서버를 휴대폰 메모리, SQLite 데이터베이스 또는 공유 기본 설정 (권장)을 사용하여 파일에 저장해야합니다. [http://developer.android.com/guide/topics/data/data-storage.html].

두 번째 질문에 대한 답변에서 나는 다른 전반적인 접근법을 사용했을 수도 있습니다. 당신이 정의 된 서버를 넣어려고하고 공유 환경 설정

당신의에서 onCreate 방법
// 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>(); 

에게 (사용자가 응용 프로그램을 여는 첫 번째 시간)을 사용하여 시스템을 설정하면 응용 프로그램에 대한 진입 점에서

시스템 이후

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,""); 

이제 사용자가 페이지를 열고 서버 이름을 입력 한 다음 버튼을 클릭하면됩니다. 동일한 활동에있는 대화 상자 인 경우이를 목록 및 공유 환경 설정에 추가 할 수 있습니다. If 그것은 다른 액티비티에 있고, 그것을 통해 보내고, 의도대로, 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(); 
} 

희망이 있습니다.

0

2 edittexts을 포함하는에 AlertDialog를 생성; 하나는 이름 용이고 다른 하나는 URL 용입니다. 그 다음 그것을 사용하여 새로운 엔트리를 소개합니다; 언급 된 바와 같습니다 this example

+0

. 나는 진입 한 서버가 항상 목록에 남아 있기를 원했다. 이것이 가능한가? 그것에 대해 –

+0

, 당신은 mi8 영구적으로 그것을 저장하는 공유의 사용 –

관련 문제