2011-09-30 8 views
2

안녕하세요 XML 및 구문 분석 데이터를 다운로드하고 있습니다. 스피너에 데이터를 추가하고 싶습니다. 응용 프로그램을 실행할 때마다 데이터가 업데이트됩니다.xml에서 스피너에 데이터를 동적으로 추가하는 방법

public class Main extends ListActivity { 
    TextView valueTextView; 
    HashMap<String, String> name=null; 
    private HashMap<String, String> array_spinner[]; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main) 
     ArrayList<HashMap<String, String>>mylist = new ArrayList<HashMap<String, String>>(); 
     String xml = XMLfunctions.getXML(); 
     Document doc = XMLfunctions.XMLfromString(xml); 
     NodeList nodes = doc.getElementsByTagName("Table"); 
     Toast.makeText(Main.this, "ID '" + nodes.getLength(),Toast.LENGTH_LONG).show();  
     for (int i = 0; i < nodes.getLength(); i++) { 
      HashMap<String, String> map = new HashMap<String, String>(); 
      Element e = (Element)nodes.item(i); 
      map.put("id", XMLfunctions.getValue(e, "id")); 
      map.put("name", "Name:" + XMLfunctions.getValue(e, "name")); 
      map.put("Score", "Score: " + XMLfunctions.getValue(e, "score")); 
      mylist.add(map);   
     } 

    valueTextView = (TextView)findViewById(R.id.selected); 
    Spinner s = (Spinner)findViewById(R.id.spinner); 
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item); 
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
} 

그것의 불완전 코드 나는 당신에게

Abhishek

감사 SpinnerAdapter 사람이 나에게

도와주세요 적용하는 방법을 모르는 나는 당신의 해시 맵을 대신 배열을 만들 것
+0

내리스트 안의 데이터를 가져 오는 중 ... ...? –

+0

@lalit : 예 mylist에 데이터를 가져 와서 현재 ListView에 데이터를 성공적으로 표시했습니다.하지만 애플리케이션 요구 사항이 업데이트 될 때마다 데이터가 동적이기 때문에 필자는 Spinner에 구문 분석 데이터를 필요로했습니다. –

+0

글쎄, 당신 mylist는 ArrayList 에 데이터를 넣고 회 전자에 추가한다고 말하는지도가있는 arraylist입니다. –

답변

1

없이 Spinner가 어떻게 작동하는지 알고 있으면 이름과 점수를 결합합니다. 다음 사용자 정의 어댑터를해야 할 것이다보다 더 복잡한

String[] nameScore = (xml name score data in string array) 
ArrayAdapter adapter= new ArrayAdapter(this, android.R.layout.simple_spinner_item, nameScore); 
s.setAdapter(adapter); 

아무것도 : 다음과 같이 어댑터에 전화를 겁니다.

대답 ::: 여기

당신이 할 것입니다. NameData라는 클래스를 만들고 ID, 이름 및 점수를 사용하여 속성을 설정합니다.

public class NameData { 
    public int id; 
    public String name; 
    public int score; 

    public NameData(int i, String n, int s) { 
     this.id = i; 
     this.name = n; 
     this.score = s; 
    } 
} 

다음은 당신이 당신을 위해 디자인 레이아웃을 사용하는 사용자 지정 목록 어댑터를 확인해야합니다 귀하의 데이터를 구문 분석에 연결하는 방법을 만들고

public List<NameData> getNameData() { 
    List<NameData> list = new LinkedList<NameData>(); 

    //get data from url and parse it to your namedata object 
    // /.....for loop (psuedo coding here... 
     list.add(new NameData(id, name, score)); 
    // end for loop 
    return list; 
} 

객체 NameData이로 각 항목을 넣어 행 :

private class ItemsAdapter extends BaseAdapter { 
    NameData[] items; 

    public ItemsAdapter(Context context, int textViewResourceId, NameData[] md) { 
     this.items = md; 
    } 

    @Override 
    public View getView(final int position, View convertView, ViewGroup parent) { 
     TextView text1; 
     View view = convertView; 
     if (view == null) { 
      LayoutInflater vi = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      view = vi.inflate(R.layout.yourRowForListlayout, null); 
     } 
     text1 = (TextView) view.findViewById(R.id.yourRowForListlayoutTextView); 
     text1.setText("" + (position+1)); 
     return view; 
    } 

    @Override 
    public int getCount() { 
     return this.items.length; 
    } 

    @SuppressWarnings("boxing") 
    @Override 
    public Object getItem(int p) { 
     return p; 
    } 

    @Override 
    public long getItemId(int p) { 
     return p; 
    } 
} 

은 다음 생성 코드에서이 목록을 취할 수 어댑터에 바로 추가 :

List<NameData> list = getNameData(); 
adapter = new ItemsAdapter(this, R.layout.yourRowForListlayout, list.toArray(new NameData[list.size()])); 
setAdapter(adapter); 

그리고 내가 맞춤 목록을 위해 그렇게하는 방법.

+0

안녕 JPM 답장을 보내 주셔서 감사합니다. 내 Spinner에서 Im은 이름 만 표시하려고합니다. 점수는 ID와 같은 참조입니다. 그러나 Spinner 부분에 대해서는 ArrayList 및 Hashmap에서 이름 만 추가하려고하고 Im은 약간 혼동합니다. 나는 어댑터를 사용하는 방법을 알았지 만 해시드 대신 문자열 배열을 사용하는 방법을 알려줄 수 있습니다 –

+0

예를 들어 스코어에 대한 데이터가 위치 ID와 관련이 있고 이름을 표시하는 맞춤형 어댑터를보고있을 것입니다 ... 내가 비슷한 것을 한 것 때문에 내가 그것을 파 내면 나는 당신에게 모범을 보일 것이다. – JPM

+0

추가 된 코드 예제가 도움이 되었기를 바랍니다 ... – JPM

관련 문제