2014-12-02 4 views
0

Java에 일반적으로 익숙하지 않습니다. 내 코드에는 3 개의 스피너가 있고, 2 개의 스피너에는 1 개의 기본 스피너 (2 개의 선택 사항이 있음)에 따라 목록이 표시됩니다. 몇 가지 스레드를 읽은 후 notifySetDataChanged()를 사용하여 목록을 새로 고치는 것에 대해 읽었습니다. 회 전자 목록은 변경되지 않았습니다. 몇 가지 질문 :함수 및 notifyDataSetChanged를 사용하여 1 회 전자를 사용하여 두 회 전자를 동적으로 변경 하시겠습니까?

  • notifySetDataChanged를 올바르게 사용하고 있습니까?
  • 목록을 채우는 다른 방법이 있습니까?
  • IF 함수가 적절한 방법입니까?

다음은 onCreate 메소드까지의 코드입니다.

public class MainActivity extends Activity { 

private Spinner spinner1, spinner2, spinner3, spinner4; 
private Button convertButton; 
private EditText from; 
private List <String> list1 = new ArrayList<String>(); 
private List <String> list2 = new ArrayList<String>(); 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    from = (EditText) findViewById(R.id.amount); 



    //spinners for units 
    spinner1 = (Spinner) findViewById(R.id.spinner1); 
    spinner2 = (Spinner) findViewById(R.id.spinner2); 
    spinner4 = (Spinner) findViewById(R.id.spinner4_main); 
    List<String>list4 = new ArrayList<String>(); 

    list4.add("Distance"); 
    list4.add("Weight"); 

    //adapter for main scale 
    ArrayAdapter<String> dataAdapter4 = new ArrayAdapter <String> (this, 
             android.R.layout.simple_spinner_dropdown_item, list4); 
      dataAdapter4.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
      spinner4.setAdapter(dataAdapter4); 

    //adapter for "from" currency 
    ArrayAdapter<String> dataAdapter1 = new ArrayAdapter<String>(this, 
             android.R.layout.simple_spinner_item, list1); 
      dataAdapter1.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
      spinner1.setAdapter(dataAdapter1); 

    //adapter for "to" currency  
      ArrayAdapter<String> dataAdapter2 = new ArrayAdapter<String>(this, 
               android.R.layout.simple_spinner_item, list2); 
      dataAdapter2.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
      spinner2.setAdapter(dataAdapter2); 


    Object choice = spinner4.getSelectedItemPosition(); 
    if (choice.equals("Weight")) { 
    //units to convert from 
    dataAdapter1.clear(); 
    dataAdapter1.add("Milligrams"); 
    dataAdapter1.add("Grams"); 
    dataAdapter1.add("Kilograms"); 
    dataAdapter1.add("Metric Ton"); 




    //units to convert to 
    dataAdapter2.clear(); 
    dataAdapter2.add("Milligrams"); 
    dataAdapter2.add("Grams"); 
    dataAdapter2.add("Kilograms"); 
    dataAdapter2.add("Metric Ton"); 


    } 


    else //(spinner4.getSelectedItem().toString().equals("Distance")) 
     { 

     //spinner1 = (Spinner) findViewById(R.id.spinner1); 
     dataAdapter1.clear(); 
     dataAdapter1.add("Millimeter"); 
     dataAdapter1.add("Centimeter"); 
     dataAdapter1.add("Meter"); 
     dataAdapter1.add("Kilometer"); 





     dataAdapter2.clear(); 
     dataAdapter2.add("Millimeter"); 
     dataAdapter2.add("Centimeter"); 
     dataAdapter2.add("Meter"); 
     dataAdapter2.add("Kilometer"); 



    } 

    dataAdapter1.notifyDataSetChanged(); 
    dataAdapter2.notifyDataSetChanged(); 

}` 

아무도 잘못 설명 할 수 있다면이 초보자에게 알려주십시오. =)

답변

0

U이 문제가 발생합니다. 다음은 ..

  1. 는 회 전자 1, 2 정의, 3
  2. 하는 회 전자 1,2,3에 대한 arrayAdapters을 정의해야 할 것입니다.
  3. 채우기 ArrayAdapter와 그리고 회 전자 (1) 용 어댑터를 정의한다 (spinner1.setadapter (arrayadapter1)
  4. 그런. spinner1.setOnItemSelectedListener 호출 방법 onItemSelected에서 회 2 회 3 등의 배열을 채우는 논리 채우는 귀하의 요구 사항에 따라. 그런 그래서 처음에.

를이 일을해야 spinner2.setadapter (arrayadapter2)와 spinner3.setadapter (arrayadapter3).

  • 전화, spinner2 및 spinner3 어떤 내용이 없습니다. 심지어 사용자가 클릭하면, 드롭 다운에는 아무 것도 없지만 일단 Spinner1이 사용자에 의해 선택되면 spinner2와 spinner3는 드롭 다운 값.

    setOnItemSelectedListener에서 읽으십시오. 많은 자습서를 사용할 수 있습니다. here을 참조하여 시작할 수 있습니다.

    이 방법이 효과가 있다면 제 대답을 수락하십시오.

  • 0
    Object choice = spinner4.getSelectedItemPosition(); 
    

    이것은 작동하지 않습니다. getSelectedItemPosition()

    가 반환하는 int 동일하지 않습니다 (documentation) 당신의 String에있는 모든 개체로, 참조로 Object 클래스를 사용 (드문 경우를 제외하고) 지금까지

    if (choice.equals("Weight") 
    

    결코

    에서와 같이 Java는 Object (duh!)이므로 사과와 오렌지를 비교할 수 있습니다 (둘 다 과일 임). 니가 약한 타입의 언어에서 나오는 것처럼 보인다고? ;)

    해결 방법 : 위치를 비교 :

    if (spinnerX.getSelectedItemPosition == 0)... 
    

    을 또한, 당신은 당신이 뭔가 spinner4에 선택된 경우 spinner1의 내용을 변경 하시겠습니까?

    +0

    spinner1의 내용을 변경하는 더 좋은 방법이 있습니까? 또는 내가 잘못한 것을 했는가? – Neaco

    관련 문제