在开发过程中经常使用Tabs + ListFragment 作为表现形式。

ListFragment 中加入ListView显示方式很容易。

[java] view
plain
copy

  1. package project.animalsound;
  2. import android.app.ListFragment;
  3. import android.os.Bundle;
  4. import android.view.LayoutInflater;
  5. import android.view.View;
  6. import android.view.ViewGroup;
  7. import android.widget.ListView;
  8. public class TabFirst extends ListFragment {
  9. private AnimalListAdapter adapter = null;
  10. @Override
  11. public void onCreate(Bundle savedInstanceState) {
  12. super.onCreate(savedInstanceState);
  13. adapter = new AnimalListAdapter (getActivity());
  14. setListAdapter(adapter);
  15. }
  16. @Override
  17. public View onCreateView(LayoutInflater inflater, ViewGroup container,
  18. Bundle savedInstanceState) {
  19. View v = inflater.inflate(R.layout.tab_first, container, false);
  20. return v;
  21. }
  22. @Override
  23. public void onListItemClick(ListView l, View v, int position, long id) {
  24. System.out.println("Click On List Item!!!");
  25. super.onListItemClick(l, v, position, id);
  26. }
  27. }

只要在onCreateView中增加

[java] view
plain
copy

  1. View v = inflater.inflate(R.layout.tab_first, container, false);

就可以完成。

对应的R.layout.tab_first为:

[html] view
plain
copy

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent"
  5. android:orientation="vertical" >
  6. <ListView
  7. android:id="@+id/android:list"
  8. android:layout_width="fill_parent"
  9. android:layout_height="wrap_content"
  10. />
  11. </RelativeLayout>

在这里我们对于ListView上的每个Item的布局使用下面布局

user.xml

[java] view
plain
copy

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="fill_parent"
  4. android:layout_height="fill_parent"
  5. android:orientation="horizontal" >
  6. <ImageView
  7. android:id="@+id/animal"
  8. android:layout_width="wrap_content"
  9. android:layout_height="80dp"
  10. android:layout_alignParentLeft="true"
  11. android:layout_centerVertical="true"
  12. android:layout_margin="1dp" />
  13. <LinearLayout
  14. android:layout_height="fill_parent"
  15. android:layout_width="wrap_content"
  16. android:layout_marginLeft="20dp"
  17. android:layout_toRightOf="@id/animal"
  18. android:layout_centerVertical="true"
  19. android:orientation="vertical" >
  20. <TextView
  21. android:id="@+id/cn_word"
  22. android:layout_width="wrap_content"
  23. android:layout_height="wrap_content"
  24. android:layout_gravity="center"
  25. android:textColor="#191970"
  26. android:textSize="30sp" />
  27. <TextView
  28. android:id="@+id/en_word"
  29. android:layout_width="wrap_content"
  30. android:layout_height="wrap_content"
  31. android:layout_gravity="center"
  32. android:textColor="#800080"
  33. android:textSize="30sp"/>
  34. </LinearLayout>
  35. <ImageView
  36. android:id="@+id/speaker"
  37. android:layout_width="wrap_content"
  38. android:layout_height="wrap_content"
  39. android:layout_alignParentRight="true"
  40. android:layout_margin="15dp"
  41. android:layout_centerVertical="true"
  42. android:src="@drawable/speaker"
  43. />
  44. </RelativeLayout>

但是在实现的时候常会遇到一个问题,如果相对其中的一个ImageView增加OnClickListener的时候会出现问题。

我们无法在下句获得的View对象中使用findViewById(R.id.speaker)去获得对应的ID对象。

[java] view
plain
copy

  1. View v = inflater.inflate(R.layout.tab_first, container, false);

原因是这句只是获得了R.layout.tab_first对应的View对象。

所以需要从user.xml获得对象信息。

这里可以使用Adapter轻松完成注册Listener的过程。我们继承BaseAdapter,然后在getView中实现整个初始化的过程。

[java] view
plain
copy

  1. package project.animalsound;
  2. import android.content.Context;
  3. import android.view.LayoutInflater;
  4. import android.view.View;
  5. import android.view.View.OnClickListener;
  6. import android.view.ViewGroup;
  7. import android.widget.BaseAdapter;
  8. import android.widget.ImageView;
  9. import android.widget.TextView;
  10. class ViewHolder {
  11. public ImageView animal;
  12. public TextView cn_word;
  13. public TextView en_word;
  14. public ImageView speaker;
  15. }
  16. public class AnimalListAdapter extends BaseAdapter {
  17. private LayoutInflater mInflater = null;
  18. public AnimalListAdapter(Context context){
  19. super();
  20. mInflater = (LayoutInflater) context
  21. .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
  22. }
  23. @Override
  24. public int getCount() {
  25. // TODO Auto-generated method stub
  26. return 50;
  27. }
  28. @Override
  29. public Object getItem(int position) {
  30. // TODO Auto-generated method stub
  31. return null;
  32. }
  33. @Override
  34. public long getItemId(int position) {
  35. // TODO Auto-generated method stub
  36. return position;
  37. }
  38. @Override
  39. public View getView(int position, View convertView, ViewGroup parent) {
  40. ViewHolder holder = null;
  41. if (convertView == null) {
  42. holder = new ViewHolder();
  43. convertView = mInflater.inflate(R.layout.user, null);
  44. holder.animal = (ImageView) convertView.findViewById(R.id.animal);
  45. holder.cn_word = (TextView) convertView.findViewById(R.id.cn_word);
  46. holder.en_word = (TextView) convertView.findViewById(R.id.en_word);
  47. holder.speaker = (ImageView) convertView.findViewById(R.id.speaker);
  48. convertView.setTag(holder);
  49. } else {
  50. holder = (ViewHolder) convertView.getTag();
  51. }
  52. holder.animal.setImageResource(R.drawable.ic_launcher);
  53. holder.cn_word.setText("xxxxx");
  54. holder.en_word.setText("ssssss");
  55. holder.speaker.setImageResource(R.drawable.speaker);
  56. holder.speaker.setOnClickListener(new OnClickListener(){
  57. @Override
  58. public void onClick(View v) {
  59. System.out.println("Click on the speaker image on ListItem ");
  60. }
  61. });
  62. return convertView;
  63. }
  64. }

ListFragment 使用ListView and 自定义Adapter的更多相关文章

  1. fragment、ListFragment使用ListView及自定义Listview等初始化操作

    fragment.ListFragment使用ListView及自定义Listview等初始化操作 1.先说一下 从官方api中说fragment碎片中使用Listview有专门的 ListView碎 ...

  2. android代码优化----ListView中自定义adapter的封装(ListView的模板写法)

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  3. ANDROID_MARS学习笔记_S04_008_用Listview、自定义adapter显示返回的微博数据

    一.简介 运行结果 二.代码1.xml(1)activity_main.xml <?xml version="1.0" encoding="utf-8"? ...

  4. Android ListView 自定义 Adapter

    自定义Adapter类 public class ListViewAdapter extends BaseAdapter { private static final String TAG = Mai ...

  5. android 自定义adapter和线程结合 + ListView中按钮滑动后状态丢失解决办法

    adapter+线程 1.很多时候自定义adapter的数据都是来源于服务器的,所以在获取服务器的时候就需要异步获取,这里就需要开线程了(线程池)去获取服务器的数据了.但这样有的时候adapter的中 ...

  6. 【转】Android自定义Adapter的ListView的思路及代码

    原文网址:http://www.jb51.net/article/37236.htm Android自定义Adapter的ListView的思路及代码,需要的朋友可以参考一下   在开发中,我们经常使 ...

  7. 关于自定义Adapter实现ListView的使用

    以下为使用BaseAdapter作扩展,自定义Adapter来使用ListView控件: 需要注意以下的几点: 1.自定义Adapter时,需要特别注意Adapter类中getView()方法覆盖,注 ...

  8. [Android] Android RecycleView和ListView 自定义Adapter封装类

    在网上查看了很多对应 Android RecycleView和ListView 自定义Adapter封装类 的文章,主要存在几个问题: 一).网上代码一大抄,复制来复制去,大部分都运行不起来,或者 格 ...

  9. 自定义Adapter为什么会重复多轮调用getView?——原来是ListView.onMeasure在作祟

    相信很多人在使用自定义Adapter的时候都遇到这样的问题: 假设Adapter数据源中只有30个Item,理论上每显示一个新的Item的时候就会调用一次getView,均显示一次的话是要调用getV ...

随机推荐

  1. 集合排序Comparable和Comparator有什么区别?

    Comparable和Comparator兄弟俩长得是真像.但是,需要注意下,使用中它们还是有不少区别的.下面,就一探究竟吧. 一.Comparator 做过集合排序的童鞋应该知道,可以使用Colle ...

  2. 机器学习之路--seaborn

    seaborn是基于plt的封装好的库.有很强的作图功能. 1.布局风格设置(图形的style)and 细节设置 用matplotlib作图: import numpy as np import ma ...

  3. JWT实现授权认证

    目录 一. JWT是什么 二. JWT标准规范 三. 核心代码简析 四. 登录授权示例 五. JWT 使用方式 六. JWT注意事项 一. JWT是什么 JSON Web Token(JWT)是目前最 ...

  4. ArcGIS Enterprise 10.6 (Windows)安装及部署图解

    目录 前言 1 本地环境配置 1.1 机器名修改 1.2 安装和配置IIS 2 ArcGIS for Server 2.1 安装 ArcGIS for Server 2.2 配置 ArcGIS for ...

  5. docker启动报错 (iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport

    今天修改完docker宿主机的防火墙文件 vim /etc/sysconfig/iptables 停止容器再启动时 报如下错误 (iptables failed: iptables --wait -t ...

  6. 【C_Language】---队列和栈的C程序实现

    这几天总结了C语言的队列,栈的实现方法,在此总结一下:一.栈 首先从栈开始,诚然,相信学习过数据结构的你,肯定应该知道栈是什么东西了,如果不知道也没事每一句话我就可以帮你总结--数据只在栈顶进行插入和 ...

  7. dp - LIS

    某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能超过前一发的高度.某天,雷达捕捉到敌国的导弹来袭.由于 ...

  8. 测试工具Fiddler(一)—— 基础知识

    Fiddler基础知识 一.Fiddler是什么? Fiddler是一个http协议调试代理工具,它能够记录客户端和服务器之间的所有 HTTP请求,可以针对特定的HTTP请求,分析请求数据.设置断点. ...

  9. CSS中设置元素的圆角矩形

    圆角矩形介绍 在CSS中通过border-radius属性可以实现元素的圆角矩形. border-radius属性值一共有4个,左上.右上.左下.右下. border-radius属性值规则如下:第一 ...

  10. 你在使用什么 Redis 客户端工具?

    今天发现一个不错的 Redis 客户端工具:AnotherRedisDesktopManager. 兼容 Windows Mac Linux,号称又快又稳定,加载大量 keys 时也不会崩溃. Git ...