多条数据以列表的形式展现时,需要如何实现:ListView + Adapter的形式
1.在Activity对应的xml文件中添加:<ListView>
<ListView android:layout_width="match_parent" android:layout_height="match_parent"> </ListView>
2.创建xml文件作为LIstView显示数据时使用的item:activity_news_list_view.xml
<LinearLayout android:id="@+id/ll_news" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> <TextView android:id="@+id/tv_news_title" android:layout_width="match_parent" android:layout_height="wrap_content" android:textColor="#ff333333" android:paddingLeft="15dp" android:paddingRight="15dp" android:layout_marginTop="15dp" android:textSize="16sp" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="9dp" android:layout_marginBottom="15dp" android:orientation="horizontal"> <TextView android:id="@+id/tv_news_time" android:layout_width="wrap_content" android:layout_height="17dp" android:paddingLeft="15dp" android:textColor="#ff999999" android:textSize="12sp" /> <TextView android:id="@+id/tv_news_infosource" android:layout_width="wrap_content" android:layout_height="17dp" android:paddingLeft="10dp" android:textColor="#ff999999" android:textSize="12sp" /> </LinearLayout> </LinearLayout>
3.创建自定义的适配器:NewsListAdapter.java
public class NewsListAdapter extends BaseAdapter { public Context context; public List<NewsModel> list; public int count = 0; public NewsListAdapter(Context context, List<NewsModel> list){ this.context = context; this.list = list; count = list.size(); } @Override public View getView(int position, View view, ViewGroup viewGroup) { NewsViewHolder viewHolder ; if(view == null){ view = LayoutInflater.from(context).inflate(R.layout.activity_news_list_view,viewGroup,false); viewHolder = new NewsViewHolder(); viewHolder.tv_news_title = (TextView)view.findViewById(R.id.tv_news_title); viewHolder.tv_news_time = (TextView)view.findViewById(R.id.tv_news_time); viewHolder.tv_news_infosource = (TextView)view.findViewById(R.id.tv_news_infosource); view.setTag(viewHolder); } else { viewHolder = (NewsViewHolder) view.getTag(); } viewHolder.tv_news_title.setText(list.get(position).getReportTitle()); viewHolder.tv_news_time.setText(list.get(position).getGroundTime()); viewHolder.tv_news_infosource.setText(list.get(position).getInfoSource()); return view; } @Override public Object getItem(int i) { return list.get(i);//返回当前的item对象 } @Override public long getItemId(int i) { return i;//返回当前item的id } @Override public int getCount() { return count;//返回一共有多少条记录 } class NewsViewHolder {//该类中包括item文件(activity_news_list_view)中所有需要显示内容的组件 public TextView tv_news_title; public TextView tv_news_time; public TextView tv_news_infosource; } }
4.准备工作结束了,该组装这些“内容”,使之显示我们所需的数据了
new_listview = (ListView) root.findViewById(R.id.new_listview); //获取listview对象
//下面是一个存储数据的集合,NewsModel是一个实体类,先将单条数据存储至NewsModel实体类对象中,然后存储到list集合中
List<NewsModel> list = new ArrayList<NewsModel>();
newsListAdapter = new NewsListAdapter(activity,list);//创建适配器对象,将当前Activity对象和存储了显示数据的集合list传入
new_listview.setAdapter(newsListAdapter);//listview对象与适配器对象关联
newsListAdapter.notifyDataSetChanged();//当适配器中的内容(即list集合中的数据)有改变时,通知listview去更新显示内容
//显示出来的列表内容也是可以被点击跳转至其他页面的
new_listview.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { String id = list.get(i).getId();//获取被点击的记录的id String detailUrl = AssembleurlUtils.assembleInfoUrl(activity, ConstantValue.HOMEGRAILINFODETAILURL, null); detailUrl = detailUrl.replace("{ID}", id); Intent intent = new Intent(); intent.putExtra("url", detailUrl); intent.putExtra(IntentKeys.TITLE_NAME, activity.getString(R.string.over_all_information)); TradeForwardUtils.forward(activity, HsActivityId.SELECT_STOCK, intent); } });
总结下,Android只能在主线程中更新界面UI,所以上述内容在运行时会报错,需要将其放入runOnUiThread中
activity.runOnUiThread(new Runnable() { @Override public void run() { newsListAdapter = new NewsListAdapter(activity,list); new_listview.setAdapter(newsListAdapter); new_listview.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { String id = list.get(i).getId(); String detailUrl = AssembleurlUtils.assembleInfoUrl(activity, ConstantValue.HOMEGRAILINFODETAILURL, null); detailUrl = detailUrl.replace("{ID}", id); Intent intent = new Intent(); intent.putExtra("url", detailUrl); intent.putExtra(IntentKeys.TITLE_NAME, activity.getString(R.string.over_all_information)); TradeForwardUtils.forward(activity, HsActivityId.SELECT_STOCK, intent); } }); newsListAdapter.notifyDataSetChanged(); } });
之前学着用过这中以列表形式显示内容的方式,结果时间一长,基本忘得差不多了,唉,结果再用时,丢人了,丢的无地自容啊!!!!所以还是自己写写,梳理下思路,省得以后再忘了~