0

다른 스피너의 항목 선택을 기준으로 스피너 값을 변경하려고합니다. 두 스피너를 채우는 데 사용되는 값은 array라는 xml 파일에 있습니다. 배열 파일은 여기notifyDataSetChanged()를 시작하면 어떻게 작동합니까?

<string-array name="eventYear"> 
     <item>2010</item> 
     <item>2010</item> 
     <item>2010</item> 
    </string-array> 
    <string-array name="eventName"> 
     <item>something</item> 
     <item>something</item> 
     <item>something</item> 
     <item>something</item> 
     . 
     . 
     . 
    </string-array> 

같은 것이없는 이유 adapter0이

private class myOnItemSelectedListner implements OnItemSelectedListener { 

     @Override 
     public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, 
       long arg3) { 
      // TODO Auto-generated method stub 
      int count = 0; 

      if (count >= 1) { 
       // TODO Auto-generated method stub 
       // Get the year selected from the spinner 
       int data = Integer.parseInt(yearSpinner.getItemAtPosition(arg2) 
         .toString()); 
       Log.v("RS", "Data: " + data); 
       // Depending on which year has been selected intialize the 
       // new adapter and set it for the event name spinner 
       switch (data) { 
       case 2010: 
        adapter0 = ArrayAdapter.createFromResource(
          ReportSelectionActivity.this, 
          R.array.eventName2010, 
          android.R.layout.simple_spinner_dropdown_item); 
       case 2011: 
        adapter0 = ArrayAdapter.createFromResource(
          ReportSelectionActivity.this, 
          R.array.eventName2011, 
          android.R.layout.simple_spinner_dropdown_item); 
       case 2012: 
        adapter0 = ArrayAdapter.createFromResource(
          ReportSelectionActivity.this, 
          R.array.eventName2012, 
          android.R.layout.simple_spinner_dropdown_item); 
       default: 
        adapter0 = ArrayAdapter.createFromResource(
          ReportSelectionActivity.this, R.array.plzSelect, 
          android.R.layout.simple_spinner_dropdown_item); 
       } 
       // Add adapter to spinner 
       adapter0.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
       nameSpinner.setAdapter(adapter0); 
       // Change UI view 
       adapter0.notifyDataSetChanged(); 
      }// End of if statment 
      count++; 

     } 

     @Override 
     public void onNothingSelected(AdapterView<?> arg0) { 
      // TODO Auto-generated method stub 

     } 
    }// End of private class myOnItemSelectedListener 

그래서 글로벌 varibale가

protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_report_selection); 

     // Display UI Elements 
     Log.v("RS", "Displaying Headers and Form"); 
     headerText = (TextView) findViewById(R.id.headerTextView); 
     subheaderText = (TextView) findViewById(R.id.subHeaderTextView); 
     headerForm = (LinearLayout) findViewById(R.id.headerForm); 

     // For Event Year 
     yearTextView = (TextView) findViewById(R.id.yearTextView); 
     yearSpinner = (Spinner) findViewById(R.id.yearSpinner); 
     adapter0 = ArrayAdapter.createFromResource(
       ReportSelectionActivity.this, R.array.eventYear, 
       android.R.layout.simple_spinner_dropdown_item); 
     adapter0.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
     yearSpinner.setAdapter(adapter0); 
     // When a year is selected change the options in the event name spinner 
     yearSpinner.setOnItemSelectedListener(new myOnItemSelectedListner()); 

     // For Event Names 
     nameTextView = (TextView) findViewById(R.id.nameTextView); 
     nameSpinner = (Spinner) findViewById(R.id.nameSpinner); 
     ArrayAdapter<CharSequence> adapter1 = ArrayAdapter.createFromResource(
       ReportSelectionActivity.this, R.array.plzSelect, 
       android.R.layout.simple_spinner_dropdown_item); 
     adapter1.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
     nameSpinner.setAdapter(adapter1); 

     // Add table rows to view 
     yearTableRow = (TableRow) findViewById(R.id.yearTableRow); 
     nameTableRow = (TableRow) findViewById(R.id.nameTableRow); 
    } 

에서 onCreate 방법 및 기타 관련 코드 보인다 notifyDataSetChanged()가 작동하지 않습니까?

업데이트 된 코드

분명히
private class myOnItemSelectedListner implements OnItemSelectedListener { 
     ArrayAdapter<CharSequence> adapter; 
     String[] array; 

     @Override 
     public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, 
       long arg3) { 
      // Log.v("RS", "In on onItemSelected"); 
      // TODO Auto-generated method stub 
      // int count = 0; 

      /* if (count >= 1) { */ 
      // TODO Auto-generated method stub 
      // Get the year selected from the spinner 
      int data; 
      try{ 
      data = Integer.parseInt(yearSpinner.getItemAtPosition(arg2) 
        .toString()); 
      }catch(NumberFormatException e){ 
       data = 0; 
      } 
      Log.v("RS", "Data: " + data); 
      // Depending on which year has been selected intialize the 
      // new adapter and set it for the event name spinner 
      switch (data) { 
      case 2010: 
       Log.v("RS", "Case 2010"); 
       adapter1.clear(); 
       array = getResources().getStringArray(R.array.eventName2010); 
       list = new ArrayList<String>(Arrays.asList(array)); 
       adapter1.add((CharSequence) list); 
       /* 
       * = ArrayAdapter.createFromResource(
       * ReportSelectionActivity.this, R.array.eventName2010, 
       * android.R.layout.simple_spinner_dropdown_item) 
       */ 
       ; 
      case 2011: 
       Log.v("RS", "Case 2011"); 
       adapter1.clear(); 
       array = getResources().getStringArray(R.array.eventName2011); 
       list = new ArrayList<String>(Arrays.asList(array)); 
       adapter1.add((CharSequence) list); 
       /* 
       * adapter0 = ArrayAdapter.createFromResource(
       * ReportSelectionActivity.this, R.array.eventName2011, 
       * android.R.layout.simple_spinner_dropdown_item); 
       */ 
      case 2012: 
       Log.v("RS", "Case 2012"); 
       adapter1.clear(); 
       array = getResources().getStringArray(R.array.eventName2012); 
       list = new ArrayList<String>(Arrays.asList(array)); 
       adapter1.add((CharSequence) list); 
       /* 
       * adapter0 = ArrayAdapter.createFromResource(
       * ReportSelectionActivity.this, R.array.eventName2012, 
       * android.R.layout.simple_spinner_dropdown_item); 
       */ 
      default: 
       Log.v("RS", "Case default"); 
       adapter1.clear(); 
       array = getResources().getStringArray(R.array.plzSelect); 
       list = new ArrayList<String>(Arrays.asList(array)); 
       adapter1.add((CharSequence) list); 
       /* 
       * adapter0 = ArrayAdapter.createFromResource(
       * ReportSelectionActivity.this, R.array.plzSelect, 
       * android.R.layout.simple_spinner_dropdown_item); 
       */ 
      } 
      // Add adapter to spinner 

      adapter1.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
      nameSpinner.setAdapter(adapter1); 

      // Change UI view 
      // Log.v("RS", "notifying view of change"); 
      adapter1.notifyDataSetChanged(); 
      /* 
      * }// End of if statment 
      */ 
     } 

     @Override 
     public void onNothingSelected(AdapterView<?> arg0) { 
      // TODO Auto-generated method stub 

     } 
    }// End of private class myOnItemSelectedListener 
+0

당신이 어댑터는 다음 변경 때마다 다시하는 경우 notifyDataSetChanged 내가 notifyDataSetChanged를 추가하기 전에 그것은 작동하지 않는 – eski

+0

@ eskimoapps.com 중복됩니다. 나는 그것을 온라인으로보고 그것이 효과가있을 것이라고 생각했다. 그것을 이해하면 notifyDataSetChanged()를 사용해야하는보기에서 변경된 내용이 표시됩니다. – thad

+0

데이터를 기존 어댑터로 변경하는 경우, 데이터를 기존 어댑터로 다시 작성하는 경우입니다. 귀하의 스위치 성명서가 제대로 통과하는지 확인 했습니까? – eski

답변

0
int count = 0; 
if (count >= 1) { 

바로 사전을 0으로 설정하면> = 1 없을 것 계산

당신은 내부에 스위치 내부 adapter0 만드는
+0

그 부분을 제거하고 여전히 작동하지 않았다. – thad

+0

Log.v ("RS", "Data :"+ 데이터); 이 결과는 무엇입니까? – eski

+0

처음 스피너에서 실제로 정확한 정보를 얻었는지 확인하기 위해 사용했습니다 – thad

0

당신이 가지고 있기 때문에 그것이 결코지나 가지 않는 경우 :

int count = 0; 

if (count >= 1) { 
이 도움이

희망은 ...

+0

if를 제거했으나 여전히 작동하지 않습니다. – thad

+0

@ user2127364 이제 스위치 그룹에서 adapter0을 adapter1로 바꾸어 시도해보십시오. – Christos

+0

그랬습니다. 나는 또한 clear, add 및 notifyDataSetChanged를 사용하는 것이 더 낫다고 말한 온라인 예제를 발견했다. 그래서 그것을 구현했습니다. 이제 numberformatexception 오류가 발생합니다. 그러나, 나는 그것을 막아야하는 try catch 블록을 추가했고 나는 여전히 그 오류를 얻고있다. 내가 변경 한 내용을 초기 게시물에 추가하겠습니다. – thad

관련 문제