2013-05-04 3 views
1

Im 운동 로그를 작성 중입니다. 사용자가 새로운 운동 유형을 추가 할 수 있기를 바랍니다.새로운 문자열을 리소스 문자열 배열에 동적으로 추가하십시오.

리소스의 문자열 배열을 만들고 리소스의 문자열 배열에서 문자열을 가져 오는 회 전자를 만들었습니다.

자바 코드에서 자원 문자열 배열에 새 문자열을 추가하는 방법을 모르겠다. 이 코드를 시도했지만 예외가 발생합니다. 돕는

감사합니다 :)

public void onClick(View v) { 

    switch(v.getId()){ 

    case R.id.setNewExercise: 
     String[] exerciseStringArray = getResources().getStringArray(R.array.exerciseTypes); 
     ArrayAdapter<CharSequence> list = ArrayAdapter.createFromResource(this, R.array.exerciseTypes, android.R.layout.simple_list_item_1); 

     String exerciseCheck = addNewExercise.getText().toString(); 
     try{ 
     for (int i = 0; i < exerciseStringArray.length; i++) 
     { 
      if (exerciseCheck.equals(exerciseStringArray[i])) 
      { 
       Toast.makeText(getApplicationContext(), "This exercise already exist", Toast.LENGTH_LONG).show(); 
       break; 
      } 
      else if (i == exerciseStringArray.length - 1 && exerciseCheck.equals(exerciseStringArray[i]) == false) 
      { 
       list.add(exerciseCheck); 
       Toast.makeText(getApplicationContext(), "Added Successfully", Toast.LENGTH_LONG).show(); 
       break; 
      } 
     } 
     }catch(Exception e){ 

      Toast.makeText(getApplicationContext(), "wtf", Toast.LENGTH_LONG).show(); 
     } 

    } 

} 

필자는 지금이 코드를 시도하고 내 스피너는 비어로드되고 난 새 문자열을 저장하려고 할 때 힘이 폐쇄 얻을.

/////////////////////Exercise spinner///////////////////// 
    // Create an ArrayAdapter using the string array and a default spinner layout 
    list = new ArrayList<CharSequence>(); 
    exerciseAdapter = new ArrayAdapter<CharSequence>(this, R.array.exerciseTypes, list); 

    // Specify the layout to use when the list of choices appears 
    exerciseAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 

    // Apply the adapter to the spinner 
    workOutChoose.setAdapter(exerciseAdapter); 


} 

@Override 
public void onClick(View v) { 

    switch(v.getId()){ 

    case R.id.setNewExercise: 


     String exerciseCheck = addNewExercise.getText().toString(); 

     try{ 

      if (exerciseAdapter.getPosition(exerciseCheck) >= 0) 
      { 
       Toast.makeText(getApplicationContext(), "This exercise already exist", Toast.LENGTH_LONG).show(); 
       break; 
      } 
      else 
      { 
       exerciseAdapter.add(exerciseCheck); 
       exerciseAdapter.notifyDataSetChanged(); 

       Toast.makeText(getApplicationContext(), "Added Successfully", Toast.LENGTH_LONG).show(); 
       break; 
      } 
     } 
     catch(Exception e){ 

      Toast.makeText(getApplicationContext(), "wtf", Toast.LENGTH_LONG).show(); 
     } 

    } 

} 

답변

1

리소스 자체는 수정할 수 없습니다. String[]ArrayList<String>으로 변환하고 원하는 경우 다른 위치에서 가져온 추가 문자열 (예 : 파일, 데이터베이스, SharedPreferences)을 추가 할 수 있습니다. ArrayAdapterArrayList에서 만들어진 경우 ArrayAdapter 작품에

add()는, Java 배열의 크기가 아닌 Java 배열 ([])는 런타임에 변경할 수 없습니다.

+0

감사합니다. 어댑터 정보를 얻을 수있는 좋은 소스가 있습니까? – tomer

+0

@tomer :이 책에서 발췌 한 내용은'ArrayAdapter' 사용에 대해 다루고 있습니다. http://commonsware.com/Android/excerpt.pdf – CommonsWare

+0

감사합니다. – tomer

관련 문제