2014-07-15 2 views
2

웹 API에서 값을 가져 와서 어댑터로 업데이트하려고합니다. 나는 API에서 값을 가지고 그 또한 드롭 다운에 표시하지만, 그 선택된 값이 표시되지 아래로 내가 드롭에서 값을 선택할 때 여기 selected 안드로이드에서 드롭 다운의 값이 작동하지 않습니다.

내 코드입니다 : -

public class ApplyLeave extends BaseActivity implements OnItemSelectedListener { 

List<String>Leavetype=new ArrayList<String>(); 
String selState=null;// variable used for store the value of selected value in drop down 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.xyz); 

    context=this; 

    getLeaveType();// method fetching the value from API and updating it in leaveType 
    final Spinner spinerLeavetype = (Spinner)findViewById(R.id.spLeavetype); 

    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, 
      android.R.layout.simple_spinner_item,Leavetype); 
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
    spinerLeavetype.setAdapter(adapter); 
    spinerLeavetype.setOnItemSelectedListener(this); 
} 

private void getLeaveType() 
{ 

    new Thread(new Runnable() { 
     @Override 
     public void run() { 
      LeaveTypeResponse jsonResponse=ServiceManager.CompanyLeaveType(context,app); 

      if(jsonResponse!=null){ 

        if(jsonResponse.Response!=null){ 
         for(Leave leaveTypeName:jsonResponse.Response) 
         { 
          Leavetype.add(leaveTypeName.Name);// here Leavetype is updating with value 

         } 
        } 
      } 
      else{ 
       CommonTasks.ShowToast(getApplicationContext(),handler,getString(R.string.NETWORKCONNECTIONEXCEPTION_MESSAGE)); 
      } 

     } 
    }).start(); 

} 


@Override 
public void onItemSelected(AdapterView<?> adapterView, View view, int position, long id) { 
    selState= String.valueOf(adapterView.getSelectedItem());// selected value storing in selState variable . 

} 
@Override 
public void onNothingSelected(AdapterView<?> arg0) { 

} 


} 

드롭 동안 - 다운은

string[] Leavetype=new String[]{"Medical","Casual"}; 

과 같은 딱딱한 코드로 작업하고 있습니다. 내가 잘못하고있는 부분을 알려주십시오. 미리 감사드립니다.

답변

0

작은 실수는 me..but 위해 일하는 것은 당신이 문제가 무엇인지 말해 줄 수는이

private void getLeaveType() 
    { 

     new Thread(new Runnable() { 
      @Override 
      public void run() { 
       LeaveTypeResponse jsonResponse=ServiceManager.CompanyLeaveType(context,app); 

       if(jsonResponse!=null){ 

        if(jsonResponse.Response!=null){ 
         for(Leave leaveTypeName:jsonResponse.Response) 
         { 
          Leavetype.add(leaveTypeName.Name);// here Leavetype is updating with value 

         } 
         runOnUiThread(new Runnable() { 
          @Override 
          public void run() { 
           spinerLeavetype.setAdapter(adapter); 
           spinerLeavetype.setOnItemSelectedListener(ApplyLeave.this); 
          } 
         }); 
        } 
       } 
       else{ 
        CommonTasks.ShowToast(getApplicationContext(),handler,getString(R.string.NETWORKCONNECTIONEXCEPTION_MESSAGE)); 
       } 

      } 
     }).start(); 

    } 
+0

감사처럼 websrvice에서 검색된 데이터 후 어댑터를 적용합니다. –

+0

getLeaveType()이 백그라운드 스레드에서 실행 중이며 서버에서 데이터를 가져 오기 전에 어댑터와 수신기를 설정하기 때문에 확실합니다. –

+0

ok .. 다시 한 번 감사드립니다. –

관련 문제