Android 将简单的Listview程序转换为Listview的XML解析器 我正在将ListVIEW示例转换成一个程序,该程序通过读取XML文件来运行,然后填充具有内容的列表视图。但我似乎遇到了一个障碍。我不知道如何使用我为第一个示例制作的适配器,以及如何在这个新程序中使用它,任何指针都将不胜感激。 这是主要的 Phonebook phonebook = null; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); ListView list = (ListView) findViewById(R.id.ListView01); list.setClickable(true); final List<Phonebook> listOfPhonebook = new ArrayList<Phonebook>(); PhonebookAdapterView adapter = new PhonebookAdapterView(this, listOfPhonebook); list.setAdapter(adapter); try { /** Handling XML */ SAXParserFactory spf = SAXParserFactory.newInstance(); SAXParser sp = spf.newSAXParser(); XMLReader xr = sp.getXMLReader(); /** Send URL to parse XML Tags */ InputSource is = new InputSource(getResources().openRawResource(R.raw.example)); /** Create handler to handle XML Tags ( extends DefaultHandler ) */ MyXMLHandler myXMLHandler = new MyXMLHandler(); xr.setContentHandler(myXMLHandler); xr.parse(new InputSource(is.getByteStream())); } catch (Exception e) { System.out.println("XML Parsing Exception = " + e); } phonebook = MyXMLHandler.phonebook; list.setAdapter(adapter); Phonebook-Phonebook=null; /**在首次创建活动时调用*/ @凌驾 创建时的公共void(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.main); ListView列表=(ListView)findViewById(R.id.ListView01); list.setClickable(true); PhoneBook的最终列表列表=新的ArrayList(); PhonebookAdapterView adapter=新的PhonebookAdapterView(此,电话簿列表); list.setAdapter(适配器); 试一试{ /**处理XML*/ SAXParserFactory spf=SAXParserFactory.newInstance(); SAXParser sp=spf.newSAXParser(); XMLReader xr=sp.getXMLReader(); /**发送URL以解析XML标记*/ InputSource is=新的InputSource(getResources().openRawResource(R.raw.example)); /**创建处理XML标记的处理程序(扩展DefaultHandler)*/ MyXMLHandler MyXMLHandler=新的MyXMLHandler(); xr.setContentHandler(myXMLHandler); parse(新的InputSource(is.getByTestStream()); }捕获(例外e){ System.out.println(“XML解析异常=”+e); } phonebook=MyXMLHandler.phonebook; list.setAdapter(适配器);
下面是xml处理程序Android 将简单的Listview程序转换为Listview的XML解析器 我正在将ListVIEW示例转换成一个程序,该程序通过读取XML文件来运行,然后填充具有内容的列表视图。但我似乎遇到了一个障碍。我不知道如何使用我为第一个示例制作的适配器,以及如何在这个新程序中使用它,任何指针都将不胜感激。 这是主要的 Phonebook phonebook = null; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); ListView list = (ListView) findViewById(R.id.ListView01); list.setClickable(true); final List<Phonebook> listOfPhonebook = new ArrayList<Phonebook>(); PhonebookAdapterView adapter = new PhonebookAdapterView(this, listOfPhonebook); list.setAdapter(adapter); try { /** Handling XML */ SAXParserFactory spf = SAXParserFactory.newInstance(); SAXParser sp = spf.newSAXParser(); XMLReader xr = sp.getXMLReader(); /** Send URL to parse XML Tags */ InputSource is = new InputSource(getResources().openRawResource(R.raw.example)); /** Create handler to handle XML Tags ( extends DefaultHandler ) */ MyXMLHandler myXMLHandler = new MyXMLHandler(); xr.setContentHandler(myXMLHandler); xr.parse(new InputSource(is.getByteStream())); } catch (Exception e) { System.out.println("XML Parsing Exception = " + e); } phonebook = MyXMLHandler.phonebook; list.setAdapter(adapter); Phonebook-Phonebook=null; /**在首次创建活动时调用*/ @凌驾 创建时的公共void(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.main); ListView列表=(ListView)findViewById(R.id.ListView01); list.setClickable(true); PhoneBook的最终列表列表=新的ArrayList(); PhonebookAdapterView adapter=新的PhonebookAdapterView(此,电话簿列表); list.setAdapter(适配器); 试一试{ /**处理XML*/ SAXParserFactory spf=SAXParserFactory.newInstance(); SAXParser sp=spf.newSAXParser(); XMLReader xr=sp.getXMLReader(); /**发送URL以解析XML标记*/ InputSource is=新的InputSource(getResources().openRawResource(R.raw.example)); /**创建处理XML标记的处理程序(扩展DefaultHandler)*/ MyXMLHandler MyXMLHandler=新的MyXMLHandler(); xr.setContentHandler(myXMLHandler); parse(新的InputSource(is.getByTestStream()); }捕获(例外e){ System.out.println(“XML解析异常=”+e); } phonebook=MyXMLHandler.phonebook; list.setAdapter(适配器);,android,xml,listview,adapter,Android,Xml,Listview,Adapter,下面是xml处理程序 Boolean currentElement = false; String currentValue = null; public static Phonebook phonebook = null; public static Phonebook getPhonebook() { return phonebook; } public static void setPhonebook(Phonebook
Boolean currentElement = false;
String currentValue = null;
public static Phonebook phonebook = null;
public static Phonebook getPhonebook() {
return phonebook;
}
public static void setPhonebook(Phonebook p) {
MyXMLHandler.phonebook = p;
}
@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
currentElement = true;
if (localName.equals("maintag"))
{
/** Start */
phonebook = new Phonebook();
}
}
/** Called when tag closing ( ex:- <name>AndroidPeople</name>
* -- </name> )*/
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
currentElement = false;
/** set value */
if (localName.equalsIgnoreCase("name"))
phonebook.setName(currentValue);
else if (localName.equalsIgnoreCase("phone"))
phonebook.setPhone(currentValue);
else if (localName.equalsIgnoreCase("Mail"))
phonebook.setMail(currentValue);
}
/** Called to get tag characters ( ex:- <name>AndroidPeople</name>
* -- to get AndroidPeople Character ) */
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
if (currentElement) {
currentValue = new String(ch, start, length);
currentElement = false;
}
}
}
Boolean currentElement=false;
字符串currentValue=null;
公共静态电话簿电话簿=空;
公共静态电话簿getPhonebook(){
归还电话簿;
}
公共静态无效设置电话簿(电话簿p){
MyXMLHandler.phonebook=p;
}
@凌驾
public void startElement(字符串uri、字符串localName、字符串qName、,
属性)引发SAX异常{
currentElement=true;
if(localName.equals(“maintag”))
{
/**开始*/
电话簿=新电话簿();
}
}
/**标记关闭时调用(例如:-AndroidPeople
* -- )*/
@凌驾
公共void endElement(字符串uri、字符串localName、字符串qName)
抛出SAX异常{
currentElement=false;
/**设定值*/
if(localName.equalsIgnoreCase(“名称”))
电话簿.setName(当前值);
else if(localName.equalsIgnoreCase(“电话”))
电话簿。设置电话(当前值);
else if(localName.equalsIgnoreCase(“邮件”))
设置邮件(当前值);
}
/**调用以获取标记字符(例如:-AndroidPeople
*——获得男性化(人物性格)*/
@凌驾
公共无效字符(字符[]ch,整数开始,整数长度)
抛出SAX异常{
if(当前元素){
currentValue=新字符串(ch、开始、长度);
currentElement=false;
}
}
}
和适配器视图,这与它是一个简单的listview文件时相同。不过,我不知道如何考虑xml
公共类PhonebookAdapterView扩展了BaseAdapter{
private Context context;
private List<Phonebook> phonebook;
public PhonebookAdapterView(Context theContext, List<Phonebook> theListPhonebook) {
context = theContext;
phonebook = theListPhonebook;
}
@Override
public int getCount() {
return phonebook.size();
}
@Override
public Object getItem(int position) {
return phonebook.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup viewGroup) {
Phonebook entry = phonebook.get(position);
if (convertView == null) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.phone_row, null);
}
TextView tvContact = (TextView) convertView.findViewById(R.id.tvContact);
tvContact.setText(entry.getName());
TextView tvPhone = (TextView) convertView.findViewById(R.id.tvMobile);
tvPhone.setText(entry.getPhone());
TextView tvMail = (TextView) convertView.findViewById(R.id.tvMail);
tvMail.setText(entry.getMail());
return convertView;
}
私有上下文;
私人名单电话簿;
公共电话簿适配器视图(上下文,列出列表电话簿){
上下文=上下文;
电话簿=列表电话簿;
}
@凌驾
public int getCount(){
返回phonebook.size();
}
@凌驾
公共对象getItem(int位置){
返回电话簿。获取(位置);
}
@凌驾
公共长getItemId(int位置){
返回位置;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组视图组){
Phonebook条目=Phonebook.get(位置);
if(convertView==null){
LayoutFlater充气器=(LayoutFlater)context.getSystemService(context.LAYOUT\u充气器\u服务);
convertView=充气机。充气(R.layout.phone_行,空);
}
TextView-tvContact=(TextView)convertView.findViewById(R.id.tvContact);
tvContact.setText(entry.getName());
TextView tvPhone=(TextView)convertView.findViewById(R.id.tvMobile);
tvPhone.setText(entry.getPhone());
TextView tvMail=(TextView)convertView.findViewById(R.id.tvMail);
setText(entry.getMail());
返回视图;
}
}
编辑
MyXMLHAndler
公共类MyXMLHandler扩展了DefaultHandler{
Boolean currentElement = false;
String currentValue = null;
public static List<Phonebook> phonebook = new ArrayList<Phonebook>();
public static List<Phonebook> getPhonebook() {
return phonebook;
}
public static void setPhonebook(List<Phonebook> p) {
MyXMLHandler.phonebook = p;
}
@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
currentElement = true;
if (localName.equals("maintag"))
{
/** Start */
phonebook = new ArrayList<Phonebook>();
}
}
/** Called when tag closing ( ex:- <name>AndroidPeople</name>
* -- </name> )*/
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
currentElement = false;
/** set value */
if (localName.equalsIgnoreCase("name"))
((Phonebook) phonebook).setName(currentValue);
else if (localName.equalsIgnoreCase("phone"))
((Phonebook) phonebook).setPhone(currentValue);
else if (localName.equalsIgnoreCase("Mail"))
((Phonebook) phonebook).setMail(currentValue);
}
/** Called to get tag characters ( ex:- <name>AndroidPeople</name>
* -- to get AndroidPeople Character ) */
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
if (currentElement) {
currentValue = new String(ch, start, length);
currentElement = false;
}
}
}
Boolean currentElement=false;
字符串currentValue=null;
public static List phonebook=new ArrayList();
公共静态列表getPhonebook(){
归还电话簿;
}
公共静态无效设置电话簿(列表p){
MyXMLHandler.phonebook=p;
}
@凌驾
public void startElement(字符串uri、字符串localName、字符串qName、,
属性)引发SAX异常{
currentElement=true;
if(localName.equals(“maintag”))
{
/**开始*/
电话簿=新的ArrayList();
}
}
/**标记关闭时调用(例如:-AndroidPeople
* -- )*/
@凌驾
公共void endElement(字符串uri、字符串localName、字符串qName)
抛出SAX异常{
currentElement=false;
/**设定值*/
if(localName.equalsIgnoreCase(“名称”))
((电话簿)电话簿).setName(当前值);
else if(localName.equalsIgnoreCase(“电话”))
((电话簿)电话簿).setPhone(当前值);
else if(localName.equalsIgnoreCase(“邮件”))
((电话簿)电话簿).setMail(当前值);
}
/**调用以获取标记字符(例如:-AndroidPeople
*——获得男性化(人物性格)*/
@凌驾
公共无效字符(字符[]ch,整数开始,整数长度)
T
public List<Phonebook> phonebook = new ArrayList<Phonebook>();
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ListView list = (ListView) findViewById(R.id.ListView01);
list.setClickable(true);
final List<Phonebook> listOfPhonebook = MyXMLHandler.getPhonebook();
PhonebookAdapterView adapter = new PhonebookAdapterView(this, listOfPhonebook);
list.setAdapter(adapter);
try {
/** Handling XML */
SAXParserFactory spf = SAXParserFactory.newInstance();
SAXParser sp = spf.newSAXParser();
XMLReader xr = sp.getXMLReader();
/** Send URL to parse XML Tags */
InputSource is = new InputSource(getResources().openRawResource(R.raw.example));
/** Create handler to handle XML Tags ( extends DefaultHandler ) */
MyXMLHandler myXMLHandler = new MyXMLHandler();
xr.setContentHandler(myXMLHandler);
xr.parse(new InputSource(is.getByteStream()));
} catch (Exception e) {
System.out.println("XML Parsing Exception = " + e);
}
public class MyXMLHandler extends DefaultHandler {
Boolean currentElement = false;
String currentValue = null;
public List<Phonebook> phonebook = new ArrayList<Phonebook>();
public List<Phonebook> getPhonebook() {
return phonebook;
}
public void setPhonebook(List<Phonebook> p) {
phonebook = p;
}
int entryCount;
@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
currentElement = true;
if (localName.equals("maintag"))
{
/** Start */
Phonebook pb = new Phonebook();
getPhonebook().add(pb);
entryCount++;
}
}
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
/** set value */
if (localName.equalsIgnoreCase("name"))
((Phonebook)phonebook.get(entryCount)).setName(currentValue);
if (localName.equalsIgnoreCase("phone"))
((Phonebook)phonebook.get(entryCount)).setPhone(currentValue);
if (localName.equalsIgnoreCase("Mail"))
((Phonebook)phonebook.get(entryCount)).setMail(currentValue);
}
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
if (currentElement) {
currentValue = new String(ch, start, length);
currentElement = false;
}
}
public static Phonebook phonebook = null;
public static List<Phonebook> phonebook = new ArrayList<Phonebook>();
MyAdapter.setList(phonebook); // your method inside adapter
<phonebook>
<entry>
<name>abc</name>
<phone>def</phone>
<mail>ghi</mail>
</entry>
<entry>
<name>abc1</name>
<phone>def2</phone>
<mail>ghi3</mail>
</entry>
</phonebook>
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.*;
import org.xml.sax.Attributes;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.DefaultHandler;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import java.util.ArrayList;
import java.util.List;
public class ListActivity extends Activity {
ListView lv;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
LinearLayout ll = new LinearLayout(this);
LinearLayout.LayoutParams lp1 = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.WRAP_CONTENT);
ll.setLayoutParams(lp1);
ll.setOrientation(1);
lv = new ListView(this);
MyXMLHandler myXMLHandler = readXML();
List<Phonebook> listOfPhonebook = myXMLHandler.getPhonebook();
//adapter = new TaskListAdapter(this);
MyListAdapter adapter = new MyListAdapter(this, listOfPhonebook);
lv.setAdapter(adapter);
ll.addView(lv);
setContentView(ll);
}
private MyXMLHandler readXML() {
MyXMLHandler myXMLHandler = null;
try {
/** Handling XML */
SAXParserFactory spf = SAXParserFactory.newInstance();
SAXParser sp = spf.newSAXParser();
XMLReader xr = sp.getXMLReader();
/** Send URL to parse XML Tags */
InputSource is = new InputSource(getResources().openRawResource(R.raw.a));
/** Create handler to handle XML Tags ( extends DefaultHandler ) */
myXMLHandler = new MyXMLHandler();
xr.setContentHandler(myXMLHandler);
xr.parse(new InputSource(is.getByteStream()));
} catch (Exception e) {
System.out.println("XML Parsing Exception = " + e);
}
return myXMLHandler;
}
@Override
protected void onDestroy() {
super.onDestroy();
}
class MyListAdapter extends BaseAdapter {
private static final String TAG = "TaskListAdapter";
List<Phonebook> phonebook;
Context context;
public MyListAdapter(Context context, List<Phonebook> phonebook) {
this.phonebook = phonebook;
Log.d(TAG, "created new task list adapter");
this.context = context;
}
public int getCount() {
return phonebook.size();
}
public Phonebook getItem(int position) {
return phonebook.get(position);
}
public long getItemId(int position) {
return position;
}
public View getView(final int position, View convertView, ViewGroup parent) {
RelativeLayout rl = new RelativeLayout(context);
TextView textPid = new TextView(context);
textPid.setId(222222);
textPid.setText(getItem(position).getName());
TextView textName = new TextView(context);
textName.setId(333333);
textName.setText(getItem(position).getEmail());
TextView textEmail = new TextView(context);
textEmail.setId(444444);
textEmail.setText(getItem(position).getEmail());
RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(
RelativeLayout.LayoutParams.WRAP_CONTENT,
RelativeLayout.LayoutParams.WRAP_CONTENT);
lp.setMargins(1, 0, 0, 0);
rl.addView(textName, lp);
RelativeLayout.LayoutParams lp1 = new RelativeLayout.LayoutParams(
RelativeLayout.LayoutParams.WRAP_CONTENT,
RelativeLayout.LayoutParams.WRAP_CONTENT);
lp1.addRule(RelativeLayout.RIGHT_OF, textName.getId());
lp1.setMargins(1, 0, 0, 0);
rl.addView(textPid, lp1);
RelativeLayout.LayoutParams lp2 = new RelativeLayout.LayoutParams(
RelativeLayout.LayoutParams.WRAP_CONTENT,
RelativeLayout.LayoutParams.WRAP_CONTENT);
lp2.addRule(RelativeLayout.RIGHT_OF, textPid.getId());
lp2.setMargins(1, 0, 0, 0);
rl.addView(textEmail, lp2);
return rl;
}
}
class MyXMLHandler extends DefaultHandler {
Boolean currentElement = false;
String currentValue = null;
public List<Phonebook> phonebook = new ArrayList<Phonebook>();
int entryCount = 0;
public List<Phonebook> getPhonebook() {
return phonebook;
}
public void setPhonebook(List<Phonebook> p) {
phonebook = p;
}
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
currentElement = true;
if (localName.equals("entry")) {
/** Start */
Phonebook pb = new Phonebook();
getPhonebook().add(pb);
}
}
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
/** set value */
if (localName.equalsIgnoreCase("name"))
(phonebook.get(entryCount)).setName(currentValue);
if (localName.equalsIgnoreCase("phone"))
(phonebook.get(entryCount)).setPhone(currentValue);
if (localName.equalsIgnoreCase("mail"))
(phonebook.get(entryCount)).setEmail(currentValue);
if (localName.equalsIgnoreCase("entry")) entryCount++;
}
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
if (currentElement) {
currentValue = new String(ch, start, length);
currentElement = false;
}
}
}
}