`
trygood
  • 浏览: 79162 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

重写Adapter

XML 
阅读更多
重写Adapter类需要实现的方法
需要重写Adapter类的四个方法即可,分别是
public int getCount();
public Object getItem(int position);
public long getItemId(int position);
public View getView(int position, View convertView, ViewGroup parent);
调用时仍然是在ListView或ListActivity中直接setAdapter(CustomAdapter);即可
重写Adapter类
cover.xml的layout文件
<!-- 一个TextView用来放东西,一个ListView用来和fooAdapter绑定 -->
<linearlayout xmlns:android="http://schemas.android.com/apk/res/android"    
   android:layout_width="fill_parent"
   android:layout_height="fill_parent"
   android:orientation="vertical">  

   <textview android:id="@+id/title"
             android:layout_width="fill_parent"
             android:layout_height="wrap_content"
             android:text="@string/title"
             android:textsize="25pt">
   </textview>

   <listview android:id="@+id/summary"
             android:layout_width="fill_parent"
             android:layout_height="wrap_content">  
   </listview>  

</linearlayout>  
实现一个继承于Activity的类,在类中的onCreate()方法中把布局给画出来
public class Cover extends Activity {  

    @Override  
    public void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        //上面的布局
        setContentView(R.layout.cover);  
        ListView lv = (ListView) findViewById(R.id.summary);  
        //自定义Adapter
        FooAdapter adapter = new FooAdapter(this);  
        lv.setAdapter(adapter);  
    }  
}  
继承于BaseAdapter
简单的显示只有一个TextView
/*用的数据源是个很简单的String[](最好数据从外部传入),同时在类中还加上了一个Context类型的变量_ctx,此变量将在构造时被赋值。放个简单的TextView,这里对getView做修改就可以了。*/
 
class FooAdapter extends BaseAdapter {  
     private Context _ctx = null;  
     //数据源
     private String[] _data = { "foo", "bar", "foobar", "barfoo" };  
     public FooAdapter(Context context) {  
         _ctx = context;  
     }  
     @Override  
     public int getCount() {  
         return _data.length;  
     }  
     @Override  
     public Object getItem(int position) {  
         return _data[position];  
     }  
     @Override  
     public long getItemId(int position) {  
         return position;  
     }  
     @Override  
     public View getView(int position, View convertView, ViewGroup parent) {  
         //创建个TextView存放数据
         TextView tv = null;  
         if (null == convertView) {  
             tv = new TextView(_ctx);  
             Log.v("huzim", "Pos1 is " + position);  
         } else {  
             tv = (TextView) convertView;  
         }  
         tv.setText(_data[position]);  
         return tv;  
     }  
}  
每次调用getView会返回一个LinearLayout,里面包含有两个TextView
 //convertView为Adapter中每个数据显示的控件
 @Override  
 public View getView(int position, View convertView, ViewGroup parent) {  
     LinearLayout lay = null;  
     
     TextView tv_l = new TextView(_ctx);  
     TextView tv_r = new TextView(_ctx);  
     tv_l.setText("* ");  
     tv_r.setText(_data[position]);  
     tv_r.setGravity(Gravity.RIGHT);  
     if (null == convertView) {  
         lay = new LinearLayout(_ctx);  
         lay.addView(tv_l);  
         lay.addView(tv_r);  
     } else {  
         lay = (LinearLayout) convertView;  
     }  
     return lay;  
 }  
每次返回一个TableLayout,暂时里面只有两列。
用TableLayout是因为有些列可能需要右对齐,好像在TextView里面做不了。 有一点需要注意的就是,在TableLayout中如果要设置右对齐的话, 一定需要给对应列设置ColumnStretchable属性,要不然内容不会展开。
 @Override  
 public View getView(int position, View convertView, ViewGroup parent) {  
     TableLayout lay = null;  

     TableRow tr = new TableRow(_ctx);  
     TextView tv_l = new TextView(_ctx);  
     TextView tv_r = new TextView(_ctx);  
     tv_l.setText("* ");  
     tv_r.setText(_data[position]);  
     //右对齐
     tv_r.setGravity(Gravity.RIGHT);  
     tv_r.setLayoutParams(new TableRow.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));  
     tr.addView(tv_l);  
     tr.addView(tv_r, new TableRow.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));  
     if (null == convertView) {  
         lay = new TableLayout(_ctx);  
         lay.addView(tr);  
     } else {  
         lay = (TableLayout) convertView;  
     }  
     /*在TableLayout中如果要设置右对齐的话,一定需要给对应列设置ColumnStretchable属性,要不然内容不会展开*/
     lay.setColumnStretchable(1, true);  
     return lay;  
 }  
分享到:
评论

相关推荐

    重写Adapter实现Ios TableView效果

    本教程将深入探讨如何通过重写Adapter来达到这一目标,主要关注ListView的使用和适配器的定制。 首先,`ListView`是Android中用于展示可滚动列表的视图组件,它允许开发者在有限的屏幕空间内展示大量数据。与iOS的...

    自定义expandable listview,可添加图标(重写adapter)

    在这个项目中,我们将会深入探讨如何自定义一个带有图标的ExpandableListView,通过重写adapter来实现这一功能。 首先,我们需要了解ExpandableListAdapter,它是ExpandableListView的核心组件,负责数据的绑定和...

    adapter 重写

    各种重写Adapter都会出现些问题,同样的我也遇到了!求大师帮忙解决

    ListView +RatingBar +TextView +adapter

    接下来,我们重写Adapter的几个关键方法: 1. `getCount()`: 返回ListView中项的数量,即数据列表的长度。 2. `getItem(int position)`: 根据位置返回对应的数据对象。 3. `getItemId(int position)`: 返回特定位置...

    自定义Adapter 实例

    同时,还可以根据需要重写Adapter的其他方法,实现更复杂的功能,比如添加点击事件监听、数据过滤等。自定义Adapter是Android开发中的核心技能之一,掌握它能帮助我们更好地构建用户界面和处理数据展示。

    自定义万能Adapter和自定义多变布局可交互ListView

    我们可以通过重写Adapter的`getViewTypeCount()`方法来声明有多少种不同的View类型,然后在`getItemViewType(int position)`方法中返回对应位置的数据项所对应的View类型。这样,Adapter就能根据数据类型动态地创建...

    android 的listview 内部item的布局包含checkbox控件

    3.重写Adapter的getView方法时,为每个checkbox添加事件响应并记录选择状态,通过获取获取状态记录值获取所有选择的checkbox值。 需要注意的是第三点,在重写getView方法时,不要判断convertView == null,如果判断...

    自动提示文本输入(TextView)功能源码.zip

    自动提示文本输入(TextView)功能源码实现拼音汉字匹配且支持首字母,该功能主要是通过重写Adapter实现的,关键代码就是重写了Filter了,这个源码功能可以直接导入就可以使用的,大家可以看看吧。   使用说明: 1...

    Android ListView分类实现 - 第二种实现方式

    实现ListView分类的关键在于重写Adapter的以下方法: 1. `getItemViewType(int position)`:此方法返回给定位置的列表项的类型标识。根据数据源中的数据类型,我们可以返回不同的整数值,表示不同类型的视图。 2. ...

    自定义listview

    本教程将深入探讨如何在Android中实现自定义ListView,特别是通过重写Adapter来实现这一目标。 首先,理解ListView的工作原理至关重要。ListView依赖于Adapter来获取数据并将其转化为可以在ListView中显示的视图。...

    ListView保持在列表的顶部固定View 案例分析 源码.zip

    这种方法的实现通常涉及到重写Adapter的几个关键方法,比如`getCount()`, `getItem()`, `getItemId()`等。 另一种方法是使用第三方库,这些库提供了一些简便的方式来添加固定视图到ListView。这些库通常已经封装了...

    ListView 中的item随意拖动.zip

    这通常涉及到重写Adapter中的某些方法,比如getView()方法中获取触摸事件,然后使用一个辅助类来管理拖放操作。 其次,为了使item能够拖动,需要为ListView中的每个item视图设置一个拖动监听器。在这个监听器中,...

    安卓listview相关相关-ListView局部刷新实例.rar

    5. 如果数据项的复杂性较高,可能还需要重写Adapter的getView(int position, View convertView, ViewGroup parent)方法,确保只有发生变化的item被重新绘制。 "下载更多打包源码~.url"可能是一个链接,指向更多的...

    ch07_android开发_

    开发者需要重写Adapter的`getView()`方法,自定义每个列表项的布局和内容。 3. **ListView的Item点击事件**:可以通过设置OnItemClickListener监听ListView项的点击事件,实现用户交互。 4. **Header和Footer**:...

    ListView单条数据的处理(增删改查)

    你可以重写Adapter的`getView()`方法,自定义每个列表项的布局和样式。 八、监听事件 为了实现用户交互,如点击事件,可以通过设置OnItemClickListener或在列表项上添加OnClickListener来捕获用户的操作,然后执行...

    android开发listview

    我们可以为每个项目设置OnClickListener,或者重写Adapter的`getView()`方法中的`setClickable()`和`setOnClickListener()`来响应点击事件。 在"ExpandableActivity"的例子中,可能涉及到ExpandableListView,这是...

    仿qq左滑删除

    在Android开发中,"仿qq左滑删除"是一...总的来说,“仿qq左滑删除”是一个涉及到自定义ListView、自定义布局、重写Adapter等多个Android开发技术的功能。通过这样的实现,我们可以为用户提供更直观、友好的交互体验。

    RecyclerView.zip,各种布局的实现

    同时,你需要重写Adapter的方法,如onCreateViewHolder()来创建ViewHolder,以及onBindViewHolder()来填充数据到对应的ViewHolder。 除了基本布局外,RecyclerView还支持Header和Footer的添加,通过在Adapter的数据...

    Json字符串绑定自定义ListView

    3. 在Adapter中填充数据:重写Adapter的`getView()`方法,根据数据源填充每个ListView项的布局。 三、JSON字符串绑定 1. 解析JSON:使用Gson库,可以方便地将JSON字符串转换为Java对象。例如,如果你的JSON字符串...

    Listview模拟的新浪随便看看界面

    - 处理点击事件:可以重写Adapter的`getView()`方法或者在ListView上注册`.setOnItemClickListener()`监听器,实现点击项的响应。 4. **自定义View Holder** - 为了优化ListView的性能,通常会在`getView()`方法...

Global site tag (gtag.js) - Google Analytics