2011-03-23 47 views
0

在我的Android Application的服務器端應用程序也由我開發。在這個應用程序Android應用程序從服務器請求一些XML並解析它。 XML包含描述應用程序中應該有多少標籤的信息,並且每個標籤都有一個ListView,而每個列表項可以導航到另一個Activity,這也可能導致另一個子標記ListView此級別是無限的。我從服務器生成的 XML是這種類型。在Android中解析和創建無限/無限級別的List /子列表中的XML

<Application> 
    <Tabs> 
     <Tab id="1" tabtitle="Info"> 
       <ListItems> 
        <ListItem id="1" itemtype="list" itemtitle="1.1" itemdata="Issue1,Issue2,Issue3,Issue4,Issue 5"> 
        </ListItem> 
        <ListItem id="3" itemtype="list" itemtitle="1.2" itemdata="News Links"> 
        </ListItem> 
        <ListItem id="5" itemtype="list" itemtitle="1.3" itemdata="sampleDataURL type"> 
         <ListItems> 
          <ListItem id="1" itemtype="list" itemtitle="1.3.1" itemdata="some data"> 
           </ListItem> 
           <ListItem id="3" itemtype="list" itemtitle="1.3.2" itemdata="some data"> 
            <ListItems> 
             <ListItem id="1" itemtype="list" itemtitle="1.3.2.1" itemdata="Issue1,Issue2,Issue3,Issue4,Issue 5"> 
              </ListItem> 
              <ListItem id="3" itemtype="list" itemtitle="1.3.2.2" itemdata="News Links"> 
              </ListItem> 
            </ListItems> 
           </ListItem> 
          </ListItems> 
         </ListItem> 
        </ListItems> 
      </Tab> 
      <Tab id="2" tabtitle="More"> 
        <ListItems> 
        </ListItems> 
       </Tab> 
       <Tab id="3" tabtitle="Share"> 
        <ListItems> 
        </ListItems> 
       </Tab> 
     </Tabs> 
</Application> 

結果我我的機器人可以在運行時生成3個標籤,但請指導什麼類型的代碼/邏輯應該我撰寫寫它的SAXParser和我應該在Android應用程序通過解析器填充什麼類型的模型數據。我應該去HashMap而不是ArrayList<CustomClass>

這對我來說非常具有挑戰性,因爲它能夠有效且穩健地實現它。

+0

你真的有內存或時間解析無限列表嗎? – 2011-03-23 11:31:52

+0

嘿人的名單將永遠不會超過4-5的水平,但在編寫代碼的時候,我們無法知道列表可能會更長 – Abhi 2011-03-23 11:38:00

+0

您可以使用「ViewAnimator +選項卡視圖」來控制基於標籤的設計。這樣,你將不得不創建3個不同的活動,這將作爲3個標籤的內容。在每個活動中,使用ViewAnimator作爲最外層佈局,並根據您的要求添加列表視圖。 對於數據結構,您可以使用hashmap或arrayList中的任何一個..但最後它最終取決於您使用它們的效率。 可能會對此有所幫助.. – mudit 2011-03-25 13:19:29

回答

1

我已經通過在XML中引入一個新標籤來完成這項工作,即parentId中的ListItems的每個列表項都位於選項卡下,父id將b該標籤的id,並且在其他子列表項的情況下,parentId將父列表項的ID。

然後我解析並存儲在一個數組列表中的所有選項卡,並在所有項目的其它的ArrayList 然後在每一個活動我創建了一個臨時的ArrayList持有該活動有用的物品。我只可以從這個列表中的項目中篩選出的項目比較孩子的父母和母親的id。

+0

您是否也可以分享解析xml以及如何將其添加到LView和子列表中的代碼? – AAnkit 2013-09-28 15:46:25

1

事實上,您在選項卡中顯示內容不需要成爲XML的一部分。您也可以讓一個項目包含其他項目。

<Application> 
    <Items id="1" title="Info"> 
     <Item id="1" type="list" title="1.1" data="Issue1,Issue2,Issue3,Issue4,Issue 5" /> 
     <Item id="3" type="list" title="1.2" data="News Links" /> 
     <Item id="5" type="list" title="1.3" data="sampleDataURL type"> 
      <Item id="1" type="list" title="1.3.1" data="some data" /> 
      <Item id="3" type="list" title="1.3.2" data="some data"> 
       <Item id="1" type="list" title="1.3.2.1" data="Issue1,Issue2,Issue3,Issue4,Issue 5" /> 
       <Item id="3" type="list" title="1.3.2.2" data="News Links" /> 
      </Item> 
     </Item> 
    </Items> 
    <Items id="2" title="More"> 
    </Items> 
    <Items id="3" title="Share"> 
    </Items> 
</Application> 

無論您使用此結構或沒有,你可以創建本地使用項目自定義POJO Item類相似的結構,讓每個項目包含一個字段,就像...

public ArrayList<Item> mSubItems = new ArrayList<Item>(); 

..您存儲子項目的地方。並在SAX解析期間創建這些對象。

如果您想將活動中的項目傳遞給活動,那麼直接使用Bundle對象而不是自定義Item類可能更容易。