2012-08-14 2 views
0

프로그램에서 나는 여러 개의 스피너를 팽창시켜 레이아웃에 추가합니다. 각 회 전자에 대해 개인 선택을합니다. 액티비티가 평소와 같이 생성되면 모든 스피너가 자신의 선택을 얻습니다. 회전으로 인해 액티비티가 생성되면 모든 스피너에 마지막 스피너 값이 적용되고 onItemSelectedListener가 여러 번 호출됩니다. 나는 그다지 내게 논리가 아닌 것처럼 필사적이다. 여기에 코드입니다 :안드로이드를 여러 번 팽창 시키면 이상한 선택 동작이 발생합니다.

SpinnerTesterActivity.xml

public class SpinnerTesterActivity extends Activity { 
    public String[] array={"s0","s1","s2","s3","s4","s5","s6","s7","s8","s9"}; 

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

     Log.d("SPINNERTESTER", "REPAINT ACTIVITY"); 
     LinearLayout layout=(LinearLayout)this.findViewById(R.id.parentLayout); 

     for (int i = 0 ; i<3; i++){ 
      LayoutInflater layoutInflater = (LayoutInflater) this.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      ViewGroup reminderLayout = (ViewGroup) layoutInflater.inflate(R.layout.edit_item, null); 
      Spinner spinner = (Spinner) reminderLayout.findViewById(R.id.spinner); 
      spinner.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, array)); 
      spinner.setSelection(i); 

      layout.addView(reminderLayout); 

     } 
    } 

main.xml에

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" 
    android:id="@+id/parentLayout" > 
</LinearLayout> 

edit_item.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal" 
    android:paddingBottom="3dip" 
    android:paddingTop="3dip" > 

    <Spinner 
     android:id="@+id/spinner" 
     android:layout_width="0px" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     android:gravity="center" /> 

</LinearLayout> 

답변

1

나는 기본 저장 및 복원 기능은 각각의보기를 식별 생각 이드는 귀하의 모든 스피너가 동일한 ID를 가지기 때문에 동일한 데이터를받습니다.

spinner.setId(i); 

몇 가지 다른 빠른 점 :

  1. 레이아웃 edit_item.xml는 하나의 아이와의 LinearLayout을 가지고 단순히 스피너에게 자신의 식별자, 이런 경우에도 일반 ID를 제공 , 이것은 불필요합니다. 단순히 루트 요소로 스피너를 사용 : 각 루프에 위해 LayoutInflater를 가져 오는 있습니다

    <Spinner 
        xmlns:android="http://schemas.android.com/apk/res/android" 
        android:id="@+id/spinner" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" /> 
    
  2. , 당신은 한 번만 수행해야합니다. 모두 함께

: 도움이

LayoutInflater layoutInflater = (LayoutInflater) this.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    LinearLayout layout=(LinearLayout)this.findViewById(R.id.parentLayout); 

    for (int i = 0 ; i<3; i++){ 
     Spinner spinner = (Spinner) layoutInflater.inflate(R.layout.spinner, null); 
     spinner.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, array)); 
     spinner.setId(i); 
     spinner.setSelection(i); 

     layout.addView(spinner); 
    } 

희망!

+0

감사합니다. 다른 조언에도 감사드립니다. 방금 문제를 주요 아이디어로 나눌 코드를 개발했습니다. – Anthea

관련 문제