2011-09-30 63 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请人帮我

谢谢

阿布舍克

+0

你是否在myist中获取数据......? –

+0

@lalit:是我将数据导入到mylist中,目前我在ListView中成功显示数据,但我的要求是我想将解析数据导入到Spinner中,因为每次应用程序启动数据时数据都是动态更新的。 –

+0

那么你的mylist是一个与地图ArrayList我会说,把你的数据在一个ArrayList 并将其添加到微调。 –

回答

1

我会拿你的HashMap和创建一个数组,那么不知道你想让你的Spinner工作,我会结合Name和Score。然后打电话给这样的适配器:

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; 
    } 
} 

接下来,创建一个方法来连接到您的数据分析,并把每一个项目到这个NameData对象

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; 
} 

,那么你将需要使用您设计布局的自定义列表适配器行:

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在ArrayList和Hashmap中有点混淆。我知道如何使用适配器,但你可以告诉我如何使用字符串数组而不是Hashmap –

+0

是的,你可能看着一个自定义适配器,然后分数的数据与位置ID相关,然后显示名称...一旦我挖掘它,我会给你一个例子,因为我做了类似的事情。 – JPM

+0

添加代码示例希望这有助于... – JPM