在sax xml解析后在列表视图中显示项目
我已经完成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));
}
您可以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最初,只是这两组元素添加到大数组,而不是小的。
是否要合并两个数组项并将其合并为一个。那么你可以按照尼古拉斯的方式。添加数组并将其作为一个数组并将数组传递给ArrayAdapter。但是如果你想要在同一个列表中显示两个数组的数据,那么你必须使用BaseAdapter并为此编写自己的逻辑。
感谢
迪帕克
你好deepak ..当我结合两个数组项目,并使其成为一个,然后它也显示在同一列表中的数组项目...和你说的第二个技巧,显示两个数组在同一个列表中的数据,也显示数据在相同的列表中,那么两者之间会有什么差别...请详细解释... – 2011-05-18 05:45:50
意味着在将数组组合使用后,使用阵列适配器时需要作为数组使用基本适配器时,我们可以在同一列表视图中实现多个1 0r2项手段可以改变不。在同一列表视图中的行? – 2011-05-18 06:24:24
如果你想在一个列表视图项显示多个项目,您可以通过扩展BaseAdapter使用自己的适配器。但首先array_ciudad
和array_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;
}
}
正如@Deepak所说,如果你想结合两个数组,那么就使用@ nicholas.hauschild的方法。但是,如果您想在一个列表项中显示两个或更多项目/字符串,这应该会很有帮助。 – stafford 2011-05-18 05:46:17
亲爱的先生...首先v v感谢您使用完整答案..将XMLParsingExample.java类中的任何更改????所以不使用阵列适配器inXMLParsingExample.java ??? – 2011-05-18 05:59:47
@ atul-yadav只要您的XML解析工作正常,您将需要的唯一更改就是将'MyAdapter'类添加为'XMLParsingExample'中的内部类。那么不要使用'ArrayAdapter'来代替使用'new MyAdapter(this)'。如果你使用'ListActivity'进行压缩,那么在'onCreate'结尾你需要'setListAdapter(adapter);'。 – stafford 2011-05-18 06:06:29
@尼古拉斯我用上面的行,并通过大阵列以阵列适配器它ForSE召开前夕靠近.. setListAdapter(新ArrayAdapter(此, \t android.R.layout.simple_list_item_1,bigArray)); – 2011-05-18 05:36:31
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
亲爱的为什么它是不工作?怎么回事? – 2011-05-18 06:18:29