2013-04-16 78 views
0

我最近一直在研究Android ListViews,並且遇到了一些問題。我看了幾個教程,並得到了最基本的ListViews工作得很好。但是現在我想創建一個ListView來顯示一系列對象。我以爲我做的一切都是正確的。我的代碼不會產生任何錯誤,但我希望創建的列表根本不顯示。顯然,我不知道爲什麼。Android ListView不顯示來自多個ArrayList的信息

這個應用程序的目的是編制一個氣象站和機場的列表,並顯示信息(例如名稱,ID#,座標等) - 所有這些都是從一個XML文檔解析幷包含在一個Arraylist由具有適當構造函數/ getters/setters的獨立類構建)。基本上,我會得到一個電臺列表 - 然後從該列表中 - 一個電臺名稱列表設置爲一個適配器。我的ListView應該只顯示每個站的名字,但無濟於事。

我測試了我的Parser和My Arrays。這一切正常,只是沒有顯示。根據所有的教程,我的邏輯應該是正確的,我的適配器。有沒有人有什麼建議?我覺得我正在用盡所有解決方案。我的代碼張貼如下:

public class MainActivity extends Activity { 

    //local variables 
    String station_id; 
    String state; 
    String station_name; 
    double latitude; 
    double longitude; 
    String html_url; 

    //List of Station Objects 
    public ArrayList<Station> StationList = new ArrayList<Station>(); 

Method for DOM Parser 
    public void readXML(){ 

    try { 

     //new xml file and Read 
     File file1 = new File("src/fl_wx_index3.xml"); 
     DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 
     DocumentBuilder db = dbf.newDocumentBuilder(); 
     Document doc = db.parse(file1); 
     doc.getDocumentElement().normalize(); 

     NodeList nodeList = doc.getElementsByTagName("station"); 

     for (int i = 0; i < nodeList.getLength(); i++) { 

      Node node = nodeList.item(i); 

      if(node.getNodeType() == Node.ELEMENT_NODE){ 

       final Element first = (Element) node; 

       station_id = first.getElementsByTagName("station_id").item(0).getTextContent(); 
       state = first.getElementsByTagName("state").item(0).getTextContent(); 
       station_name = first.getElementsByTagName("station_name").item(0).getTextContent(); 
       latitude = Double.parseDouble(first.getElementsByTagName("latitude").item(0).getTextContent()); 
       longitude = Double.parseDouble(first.getElementsByTagName("longitude").item(0).getTextContent()); 
       html_url = first.getElementsByTagName("html_url").item(0).getTextContent(); 

       //iterate thru list, returning names of each airport 
       StationList.add(new Station(station_id, state, station_name, latitude, longitude, html_url)); 

      } 

     } 
     } catch (Exception e) { 
     System.out.println("XML Pasing Excpetion = " + e); 
     } 

} 



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

    //object for method call to read XML document 
    MainActivity activity1 = new MainActivity(); 
    activity1.readXML(); 

    final ListView listview = (ListView) findViewById(R.id.listView1); 

    //List to contain Weather station Names 
    final ArrayList<String> nameList = new ArrayList<String>(); 

    for (int i = 0; i < StationList.size(); ++i) { 
      nameList.add(StationList.get(i).getStationName()); 
     } 

    //Array adapter 
    final StableArrayAdapter adapter = new StableArrayAdapter(this,android.R.layout.simple_list_item_1, nameList); 
    listview.setAdapter(adapter); 

} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.main, menu); 
    return true; 
} 

} 
//Class creating Adapter 
class StableArrayAdapter extends ArrayAdapter<String> { 

HashMap<String, Integer> mIdMap = new HashMap<String, Integer>(); 

public StableArrayAdapter(Context context, int textViewResourceId, 
    List<String> objects) { 
    super(context, textViewResourceId, objects); 
    for (int i = 0; i < objects.size(); ++i) { 
    mIdMap.put(objects.get(i), i); 
    } 
} 

public long getItemId(int position) { 
    String item = getItem(position); 
    return mIdMap.get(item); 
} 

public boolean hasStableIds() { 
    return true; 
} 

} 

回答

0

我認爲你有HashMap倒退。您希望它將listview位置(整數)映射到字符串。所以你想要HashMap < Integer,String>;

+0

我還需要我的公共長getItemId(int位置)嗎?切換整數和字符串會導致返回類型錯誤。 – David

+0

評論出來。並且什麼也不顯示。 – David

相關問題