自定义控件之android列表分组及字母导航
来源:互联网 发布:免费crm软件 编辑:程序博客网 时间:2024/06/16 07:00
有了以上两篇文章的重构,现在把ListView分组列表重构为自定义控件就会非常简单,只需要把初始化操作放在自定义控件的构造函数里面。重构后的自定义控件以上一篇的注解重构为基础。
基本结构
这里首先贴上一张上篇文章重构后的activity的代码结构,相关的方法实现在之前两篇文章中都有贴出。
再贴一张重构后的View的结构。可见两者的结构都及其相似。不同的是上边的activity中有抽象方法getDataList(),而下边的没有,但是多了一个ILoadRulerData<T> iLoadData 类型的接口。用于加载数据。
且自定义View中把activity 中initdata()方法改为loaddata(),以供主动调用后开始加载数据。
重构后基本代码如下,省略了一部分和之前重复的代码:
首先是数据加载接口:
public interface ILoadRulerData<T> { public List<T> getDataList(); }
然后是自定义view的基本代码:
/** * @Description: 需要先调用 setiLoadData,设置获取数据的接口,然后再调用 loadData方法 */public class RulerView<T> extends LinearLayout{ private View baseView; private TextView noDataView; private TextView RulerTag; private ProgressBarWithText progress; private ListView listView; private RulerWidget ruler; private ILoadRulerData<T> iLoadData; private List<T> originalList; public List<RulerListDataWrapper<T>> dealedList; private HashMap<String, Integer> tagLocation = new HashMap<String, Integer>(); private RulerAdapter<T> rulerAdapter; public RulerView(Context context) { super(context); init( context); } public RulerView(Context context, AttributeSet attrs) { super(context, attrs); init( context); } public RulerView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs); init( context); } /** * @Description: 设置数据加载接口 * @param * @return void */ public void setiLoadData(ILoadRulerData<T> iLoadData) { this.iLoadData = iLoadData; } private void init(Context context){ baseView = LayoutInflater.from(context).inflate(R.layout.g_ruler, null); noDataView = (TextView) baseView.findViewById(R.id.g_base_list_nodata); RulerTag = (TextView) baseView.findViewById(R.id.g_ruler_tag); progress = (ProgressBarWithText) baseView.findViewById(R.id.g_base_progressbar_withtext); listView = (ListView) baseView.findViewById(R.id.g_base_list); ruler = (RulerWidget) baseView.findViewById(R.id.g_ruler); progress.setVisibility(View.VISIBLE); RulerTag.setVisibility(View.GONE); noDataView.setVisibility(View.GONE); listView.setVisibility(View.GONE); ruler.setVisibility(View.GONE); addView(baseView, LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT); } public void loadData(){ new GetDataAsyTask().execute(); } 。。。。。 }
测试
布局
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <TextView android:layout_marginTop="10dp" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="wbxtest view" android:textColor="@color/g_black" /> <******.ruler.view.RulerView android:id="@+id/test_ruler_view_id" android:layout_width="match_parent" android:layout_height="wrap_content" /></LinearLayout>
Activity
public class TestViewActivity extends Activity{ private RulerView<TestAnnotationBo> rulerView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.test_ruler_view); rulerView = (RulerView<TestAnnotationBo>) findViewById(R.id.test_ruler_view_id); rulerView.setiLoadData(new ILoadRulerData<TestAnnotationBo>() { @Override public List<TestAnnotationBo> getDataList() { return new TestAnnnoDao().getBoList(); } }); rulerView.loadData(); }}
此系列完毕。
4 1
- 自定义控件之android列表分组及字母导航
- android之ListView分组及字母索引导航
- android列表分组及字母导航-重构(2)-注解
- 自定义View之字母导航控件
- android之ListView分组及字母索引导航(2)重构-接口
- ListView分组和字母导航,自定义Toast
- 自定义字母导航条控件
- Android自定义控件5----继承View通讯录索引功能之1初始化显示字母列表
- Android 自定义控件之界面标题导航及控件打包共享
- Android-自定义控件之组装控件(自定义导航)
- android 自定义导航控件
- 【Android 仿微信通讯录 导航分组列表-下】自定义View为RecyclerView打造右侧索引导航栏IndexBar
- android自定义view 右侧字母导航
- Android 列表之分组ListView
- Android 列表之分组ListView
- android 自定义导航控件源码
- 高级控件之分组列表视图(ExpandableListView)
- Android自定义屏幕侧边字母排序控件
- About Two Recently Patched IBM DB2 LUW Vulnerabilities
- width
- 函数onsize()与onsizing()区别
- wiki插入图片显示
- 盲目给自己定位是很危险的事
- 自定义控件之android列表分组及字母导航
- Qt 之 QFileDialog
- Linux中常用命令(1)
- Android多媒体学习十一:实现仿百度图片查看功能
- JAVA经典50问—面试
- QQ通信原理
- Android常用的一些make命令
- 64位ubuntu找不到libgtk-x11-2.0.so解决方法
- 应用部署自动化工具UrbanCode Deploy系统架构