多条数据以列表的形式展现时,需要如何实现: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();
}
});
之前学着用过这中以列表形式显示内容的方式,结果时间一长,基本忘得差不多了,唉,结果再用时,丢人了,丢的无地自容啊!!!!所以还是自己写写,梳理下思路,省得以后再忘了~
本文详细介绍使用ListView和自定义Adapter在Android应用中展示多条数据的方法,包括XML布局配置、适配器创建及数据绑定过程。

4627

被折叠的 条评论
为什么被折叠?



