2011-09-30 10 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); 
} 

私はSpinnerAdapterを適用する方法がわからない、その不完全なコード、誰もが

は、私はあなたのHashMapを取り、代わりに配列を作成し、なしでしょうあなたに

アビシェーク

+0

myist内のデータを取得していますか? –

+0

@lalit:はい私はmylistにデータを取得しています。現在、ListViewにデータが正常に表示されていますが、アプリケーションの開始データが更新されるたびにデータが動的であるため、 –

+0

あなたのmylistはArrayList の中にあなたのデータを入れ、それをスピナーに追加すると言ってもよい地図を持つarraylistです。 –

答えて

1

ありがとう、私を助けてくださいあなたのスピナーがどのように機能するかを知っていれば、私は名前とスコアを組み合わせます。次に、このようなアダプタを呼び出します。

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返事をありがとう。私のスピナーでは、名前だけを表示しようとしています。スコアはIDのような照会です。しかしSpinnerの部分については、ArrayListとHashmapで名前だけを追加してImを少し混乱させたい。私はアダプタを使用する方法を持っていますが、ハッシュマップの代わりに文字列配列を使用する方法を教えてください –

+0

おそらくあなたのカスタムアダプタを見てから、スコアのデータが位置IDに関連していて、 ...似たようなことをしたので、一度掘り起こしてみると、私はあなたに例を挙げます。 – JPM

+0

コード例を参考にしてほしい。 – JPM