标签:基于sax的xml解析 含源码 ui类二 thread+handler
本节为UI部分,顺带简单的使用Thread+handler
布局类:只有两个xml文件
activity_main:主布局,仅仅只有一个listView不在给出。
item.xml使用的是相对布局,用来显示listView的各项。
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="20dp"
android:gravity="center"
>
<TextView
android:id="@+id/name_tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/id_tv"
android:layout_marginLeft="60dp"
android:layout_toRightOf="@+id/id_tv"
android:text="TextView" />
<TextView
android:id="@+id/age_tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/name_tv"
android:layout_alignBottom="@+id/name_tv"
android:layout_alignParentRight="true"
android:layout_marginRight="19dp"
android:text="TextView" />
<TextView
android:id="@+id/id_tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_marginTop="76dp"
android:text="TextView" />
</RelativeLayout>主类
public class MainActivity extends Activity{
private ListView listView=null;
private static final String TAG="parserXML";
private static final int MSG_SUCCESS = 1;//请求成功
//private static final int MSG_FAILURE = 0;//获取失败的标识
private Handler mHandler = new Handler() {
public void handleMessage (Message msg) {//此方法在ui线程运行
switch (msg.what) {
case MSG_SUCCESS:
//获取传递过来的数据
List<Person> list = (List<Person>) msg.obj;
//打印
for(Person person: list)
{
Log.d(TAG, person.toString());
}
MyAdapter adapter=new MyAdapter(list);
adapter.notifyDataSetChanged();
listView.setAdapter(adapter);
break;
default:
break;
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView=(ListView) this.findViewById(R.id.listView1);
doParserXML();
}
public class MyAdapter extends BaseAdapter
{
private List<Person>list;
//传递一个list进来
public MyAdapter(List<Person>list) {
this.list=list;
}
//返回数目
@Override
public int getCount() {
return list.size();
}
//获取position处的数据
@Override
public Object getItem(int position) {
return list.get(position);
}
//返回item的id
@Override
public long getItemId(int position) {
return position;
}
//返回view
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater=LayoutInflater.from(MainActivity.this);
ViewHolder viewHolder=null;
if(convertView==null)
{//跟iOS的重用机制类似,且对xml的加载进行优化
viewHolder=new ViewHolder();
convertView=inflater.inflate(R.layout.item,null);
viewHolder.id_tv=(TextView)convertView.findViewById(R.id.id_tv);
viewHolder.name_tv=(TextView)convertView.findViewById(R.id.name_tv);
viewHolder.age_tv=(TextView)convertView.findViewById(R.id.age_tv);
//使用tag来标识
convertView.setTag(viewHolder);
}
else {
//使用tag来取出
viewHolder=(ViewHolder) convertView.getTag();
}
Person person=list.get(position);
viewHolder.id_tv.setText(person.getId()+"");
viewHolder.age_tv.setText(person.getAge()+"");
viewHolder.name_tv.setText(person.getName()+"");
return convertView;
}
}
protected void doParserXML() {
new Thread(new Runnable() {
@Override
public void run() {
Log.d(TAG,"开始解析XML");
InputStream inputStream=HttpUtils.getXML();
List<Person>list=parserXMLUtils.XMLParser(inputStream, "person");
//使用obtainMessage(),获取一个消息
Message message=mHandler.obtainMessage();
message.what=MSG_SUCCESS;
message.obj=list;
mHandler.sendMessage(message);
}
}).start();
}
public class ViewHolder
{
public TextView id_tv;
public TextView name_tv;
public TextView age_tv;
}
@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;
}
}流程---》
1. 先进行数据处理:
doParserXML()2. 将返回的数据传递给handler
3. Handler 中listView绑定adapter。
ps:adapter的使用,baseAdapter跟iOS UItableView 简直神似呀。(delegate方法和adapter的接口的含义基本上是一个意思)
list的优化也和tableView神似:单元格重用。
源码如下:
标签:基于sax的xml解析 含源码 ui类二 thread+handler
原文地址:http://blog.csdn.net/nothingl3/article/details/45193987