2011-05-14 6 views
7

하나의 스피너에 strings.xml의 값이 거의 없으며 Button의 onclick 이벤트를 사용하여 텍스트를 동적으로 채 웁니다.하지만 어떻게 든 작동하지 않고 점점 커지고 있습니다. 강제 종료. 어떤 도움을 주시면 감사하겠습니다.편집 텍스트에서 안드로이드로 Spinner를 동적으로 채 웁니다.

package com.example.expense; 

import android.app.Activity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.ArrayAdapter; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.Spinner; 

public class Expense3 extends Activity { 
    //private TextView t1; 

    private Spinner spinner; 
    private EditText Text; 
    private ArrayAdapter<CharSequence> adapter; 
    private Button addButton; 

    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     Text = (EditText)findViewById(R.id.widget4); 
     addButton = (Button)findViewById(R.id.add_new); 

     spinner = (Spinner) findViewById(R.id.hhj); 

     adapter = ArrayAdapter.createFromResource(
       this, R.array.planets_array, android.R.layout.simple_spinner_item); 
     adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
     spinner.setAdapter(adapter); 





     this.addButton.setOnClickListener(new OnClickListener() { 
      public void onClick(View v) { 

       addNewSpinnerItem(); 
     } 

      }); 

     } 

    protected void addNewSpinnerItem() { 
     // TODO Auto-generated method stub 
     CharSequence textHolder = "" + Text.getText().toString(); 
     adapter.add(textHolder); 


    } 
} 

로그 캣 오류 : -

05-14 01:07:19.934: ERROR/AndroidRuntime(802): FATAL EXCEPTION: main 
05-14 01:07:19.934: ERROR/AndroidRuntime(802): java.lang.UnsupportedOperationException 
05-14 01:07:19.934: ERROR/AndroidRuntime(802):  at java.util.AbstractList.add(AbstractList.java:411) 
05-14 01:07:19.934: ERROR/AndroidRuntime(802):  at java.util.AbstractList.add(AbstractList.java:432) 
05-14 01:07:19.934: ERROR/AndroidRuntime(802):  at android.widget.ArrayAdapter.add(ArrayAdapter.java:178) 
05-14 01:07:19.934: ERROR/AndroidRuntime(802):  at com.example.expense.Expense3.addNewSpinnerItem(Expense3.java:50) 
05-14 01:07:19.934: ERROR/AndroidRuntime(802):  at com.example.expense.Expense3$1.onClick(Expense3.java:40) 
05-14 01:07:19.934: ERROR/AndroidRuntime(802):  at android.view.View.performClick(View.java:2408) 
05-14 01:07:19.934: ERROR/AndroidRuntime(802):  at android.view.View$PerformClick.run(View.java:8816) 
05-14 01:07:19.934: ERROR/AndroidRuntime(802):  at android.os.Handler.handleCallback(Handler.java:587) 
05-14 01:07:19.934: ERROR/AndroidRuntime(802):  at android.os.Handler.dispatchMessage(Handler.java:92) 
05-14 01:07:19.934: ERROR/AndroidRuntime(802):  at android.os.Looper.loop(Looper.java:123) 
05-14 01:07:19.934: ERROR/AndroidRuntime(802):  at android.app.ActivityThread.main(ActivityThread.java:4627) 
05-14 01:07:19.934: ERROR/AndroidRuntime(802):  at java.lang.reflect.Method.invokeNative(Native Method) 
05-14 01:07:19.934: ERROR/AndroidRuntime(802):  at java.lang.reflect.Method.invoke(Method.java:521) 
05-14 01:07:19.934: ERROR/AndroidRuntime(802):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
05-14 01:07:19.934: ERROR/AndroidRuntime(802):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
05-14 01:07:19.934: ERROR/AndroidRuntime(802):  at dalvik.system.NativeStart.main(Native Method) 
+0

강제 종료의 원인을 보여주는 logcat을 게시하십시오. – Squonk

+0

@MisterSquonk Logcat 오류를 추가하여 질문을 편집했습니다 .. !! – ferhan

+0

죄송합니다. 문제가 무엇인지 해결할 수 없습니다. 아마도 어댑터를 ArrayAdapter 으로 변경하고 addNewSpinnerItem() 메서드의 textHolder도 String으로 변경하십시오. – Squonk

답변

12

당신은 지원되지 않는을 초래한다. 이 문제를 해결하려면 비어있는 목록을 만든 다음 리소스의 목록에 항목을 추가 할 수 있습니다. 이를 위해 Arrays.asList()을 사용할 수도 있고, 루프를 만들고 목록에 개별 항목을 추가 할 수도 있습니다. 목록을 만든 후에는 해당 목록을 사용하여 어댑터를 만들어야합니다.

이제 스피너 어댑터에 항목을 추가하려면 adapter.add() 메서드를 사용하여 스피너 어댑터 안에 항목을 추가하십시오. 다음은 어댑터를 작성하고 회 전자에 항목을 추가하는 방법을 설명하는 예제입니다.

adapter = new ArrayAdapter<String>(this, 
android.R.layout.simple_spinner_item, array); 

여기 배열은 목록입니다.

그리고 스피너에 항목을 추가하려면 add 메소드를 사용할 수 있습니다.

adapter.add("String to insert into spinner"); 
+1

고마워요 .. !! :) – ferhan

7

문제는 ArrayAdapter.createFromResource()는 당신이이 "지원되지 않는"작업의 (어댑터에 모든 항목을 추가 할 수 없음을 의미 불변의리스트를 반환 Arrays.asList()을 사용한다는 것입니다). 빈 어댑터를 만드는 시도하고 단지에 항목을 추가 : 당신은 그것을 줄 것이다 있도록 자원에서 생성 된 어댑터 항목을 추가하려고

adapter = new ArrayAdapter(this, android.R.layout.simple_spinner_item, 
       new ArrayList<CharSequence>()); 
2

그래, 그들이 말한 것.

package com.stackoverflow.q5999262; 

import java.util.ArrayList; 
import java.util.Arrays; 
import java.util.Collections; 
import java.util.List; 

import android.app.Activity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.ArrayAdapter; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.Spinner; 

public class Main extends Activity 
{ 
    private Spinner spinner; 
    private EditText Text; 
    private ArrayAdapter<String> adapter; 
    private Button addButton; 

    public void onCreate(Bundle savedInstanceState) 
    { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    Text = (EditText) findViewById(R.id.widget4); 
    List<String> planets = new ArrayList<String>(Arrays.asList(getResources().getStringArray(R.array.planets_array))); 
    adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, planets); 
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
    spinner = (Spinner) findViewById(R.id.hhj); 
    spinner.setAdapter(adapter); 
    addButton = (Button) findViewById(R.id.add_new); 
    addButton.setOnClickListener(new OnClickListener() 
    { 
     public void onClick(View v) 
     { 
     addNewSpinnerItem(); 
     } 
    }); 
    } 

    protected void addNewSpinnerItem() 
    { 
    String textHolder = "" + Text.getText().toString(); 
    adapter.add(textHolder); 
    } 
}
관련 문제