2011-05-18 53 views
0

我已经完成xml解析并能够在列表视图中显示一个数组项目。但是我想在一个列表中显示2个数组项目...使用数组适配器...意味着我想要array_barrio在一个列表视图我怎么能做到这一点...我的Java类在sax xml解析后在列表视图中显示项目

public class XMLParsingExample extends ListActivity { 
    String name = null; 
    private String array_estado[]; 
    private String[] array_ciudad; 
    private String array_barrio[]; 
    /** Create Object For SiteList Class */ 
    SitesList sitesList = null; 
    /** Called when the activity is first created. */ 
    @SuppressWarnings("unchecked") 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.listplaceholder); 
     /** Create a new layout to display the view */ 
     LinearLayout layout = new LinearLayout(this); 
     layout.setOrientation(1); 
    try { 

      SAXParserFactory spf = SAXParserFactory.newInstance(); 
      SAXParser sp = spf.newSAXParser(); 
      XMLReader xr = sp.getXMLReader(); 

      /** Send URL to parse XML Tags */ 
      URL sourceUrl = new URL(
        "http://www.arteonline.mobi/iphone/output.php?key=Buenos"); 

      MyXMLHandler myXMLHandler = new MyXMLHandler(); 
      xr.setContentHandler(myXMLHandler); 
      xr.parse(new InputSource(sourceUrl.openStream())); 

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

     sitesList = MyXMLHandler.sitesList; 


     array_ciudad = new String[sitesList.getEstado().size()]; 
     for (int i = 0; i < sitesList.getEstado().size(); i++) 
     { 
      name = sitesList.getEstado().get(i); 
      array_ciudad[i] = name; 
      Log.i("array_spinner" + i, array_ciudad[i]); 
     } 
     array_barrio = new String[sitesList.getBarrio().size()]; 
     for (int i = 0; i < sitesList.getBarrio().size(); i++) 
     { 
      name = sitesList.getBarrio().get(i); 
      array_barrio[i] = name; 
      // Log.i("array_spinner" + i, array_ciudad[i]); 
     } 

     setListAdapter(new ArrayAdapter(this, 
        android.R.layout.simple_list_item_1, array_barrio)); 

//  setListAdapter(new ArrayAdapter(this, 
//    android.R.layout.simple_list_item_1, array_barrio)); 

} 

回答

0

您可以array_ciudad既是一个新的String []这是大到足以容纳两个,然后复制每个元素数组添加到新数组。在你的ArrayAdapter中使用新的数组。

String[] bigArray = new String[array_barrio.length + array_ciudad.length]; 
System.arraycopy(array_barrio, 0, bigArray, 0, array_barrio.length); 
System.arraycopy(array_ciudad, array_barrio.length, bigArray, array_barrio.length, array_ciudad.length); 

另一个值得考虑的事情是将刚刚创建bigArray最初,只是这两组元素添加到大数组,而不是小的。

+0

@尼古拉斯我用上面的行,并通过大阵列以阵列适配器它ForSE召开前夕靠近.. setListAdapter(新ArrayAdapter(此, \t android.R.layout.simple_list_item_1,bigArray)); – 2011-05-18 05:36:31

+0

05-18 11:31:30.015:ERROR/AndroidRuntime(753):由于:java.lang.ArrayIndexOutOfBoundsException:src.length = 3 srcPos = 3 dst.length = 6 dstPos = 3 length = 3 – 2011-05-18 06:03:38

+0

亲爱的为什么它是不工作?怎么回事? – 2011-05-18 06:18:29

0

是否要合并两个数组项并将其合并为一个。那么你可以按照尼古拉斯的方式。添加数组并将其作为一个数组并将数组传递给ArrayAdapter。但是如果你想要在同一个列表中显示两个数组的数据,那么你必须使用BaseAdapter并为此编写自己的逻辑。

感谢

迪帕克

+0

你好deepak ..当我结合两个数组项目,并使其成为一个,然后它也显示在同一列表中的数组项目...和你说的第二个技巧,显示两个数组在同一个列表中的数据,也显示数据在相同的列表中,那么两者之间会有什么差别...请详细解释... – 2011-05-18 05:45:50

+0

意味着在将数组组合使用后,使用阵列适配器时需要作为数组使用基本适配器时,我们可以在同一列表视图中实现多个1 0r2项手段可以改变不。在同一列表视图中的行? – 2011-05-18 06:24:24

0

如果你想在一个列表视图项显示多个项目,您可以通过扩展BaseAdapter使用自己的适配器。但首先array_ciudadarray_barrio将需要是相同的大小。

每个项目需要用下面的列表项目布局表示。此布局需要放置在res/layout目录中。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 


    <!-- Location where barrio items will be displayed -->       
    <TextView android:id="@+id/barrio" 
     android:layout_height="wrap_content"   
     android:layout_width="wrap_content" /> 

    <!-- Location where ciudad items will be displayed -->       
    <TextView android:id="@+id/ciudad"     
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" />      

</LinearLayout> 

本示例自定义适配器假定array_barrio和array_ciudad长度相同。您真正需要做的就是通过膨胀布局并在需要的地方将字符串插入到TextView中来为列表项创建视图。在这个例子中MyAdapter应该是一个XMLParsingExample的内部类,它可以直接访问你定义的数组属性。

protected class MyAdapter extends BaseAdapter { 

    private LayoutInflater inflater; 

    public MyAdapter(Context ctx) { 
     super(); 
     this.inflater = (LayoutInflater) ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    }   

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

    /* Not implemented but not really needed */ 
    @Override 
    public Object getItem(int position) { 
     return null; 
    } 

    /* Not implemented but not really needed */ 
    @Override 
    public long getItemId(int position) { 
     return 0; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     View v = inflater.inflate(R.layout.listitem_layout, parent, false); 
     Course c = courses.get(position); 

     String barrio = XMLParsingExample.this.array_barrio[position]; 
     String ciudad = XMLParsingExample.this.array_ciudad[position];    

     TextView tv = (TextView) v.findViewById(R.id.barrio); 
     tv.setText(barrio); 
     tv = (TextView) v.findViewById(R.id.ciudad); 
     tv.setText(ciudad); 

     return v; 
    } 

} 
+0

正如@Deepak所说,如果你想结合两个数组,那么就使用@ nicholas.hauschild的方法。但是,如果您想在一个列表项中显示两个或更多项目/字符串,这应该会很有帮助。 – stafford 2011-05-18 05:46:17

+0

亲爱的先生...首先v v感谢您使用完整答案..将XMLParsingExample.java类中的任何更改????所以不使用阵列适配器inXMLParsingExample.java ??? – 2011-05-18 05:59:47

+0

@ atul-yadav只要您的XML解析工作正常,您将需要的唯一更改就是将'MyAdapter'类添加为'XMLParsingExample'中的内部类。那么不要使用'ArrayAdapter'来代替使用'new MyAdapter(this)'。如果你使用'ListActivity'进行压缩,那么在'onCreate'结尾你需要'setListAdapter(adapter);'。 – stafford 2011-05-18 06:06:29