androidandroid 自定义item的item中如何绑定父控件id

为了能让代码能够更多的复用,故使用组合控件。下面是我正在写的项目中用到的方法。
1、先写要组合的一些需要的控件,将其封装到一个布局xml布局文件中。
&?xml version="1.0" encoding="utf-8"?&
&RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="68dip"
android:id="@+id/aaa"
android:id="@+id/tv_update_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="20sp"
android:layout_marginTop="10dp"
android:layout_marginLeft="10dp"
android:text="是否升级" /&
android:layout_below="@id/tv_update_title"
android:id="@+id/tv_update_content"
android:textSize="15sp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:layout_marginLeft="10dp"
android:text="停止更新" /&
android:checked="false"
android:id="@+id/cb_isupdate"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true" /&
&/RelativeLayout&
2、自定义Java类
package com.frank.mobilesafe.
import com.frank.mobilesafe.R;
import android.R.
import android.content.C
import android.util.AttributeS
import android.util.L
import android.view.V
import android.widget.CheckB
import android.widget.RelativeL
import android.widget.TextV
public class SettingItemView extends RelativeLayout {
private CheckBox cb_
private TextView tv_update_
private TextView tv_update_
public SettingItemView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
initView(context);
private void initView(Context context) {
// TODO Auto-generated method stub
View.inflate(context, R.layout.setting_item_view, this);
cb_update = (CheckBox) findViewById(R.id.cb_isupdate);
tv_update_title =
(TextView) findViewById(R.id.tv_update_title);
tv_update_content = (TextView) findViewById(R.id.tv_update_content);
public SettingItemView(Context context, AttributeSet attrs) {
super(context, attrs);
initView(context);
public SettingItemView(Context context) {
super(context);
initView(context);
* 检查是否选中
public boolean isChecked() {
return cb_update.isChecked();
* 设置组合控件的状态
* @param isChecked
public void SetChecked(boolean isChecked) {
cb_update.setChecked(isChecked);
* 设置描述信息
* @param isChecked
public void SetDesc(String text) {
tv_update_content.setText(text);
3、在主界面中引用
&?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" &
android:id="@+id/tv_maintitle"
android:layout_width="match_parent"
android:layout_height="55dp"
android:background="#8866ff00"
android:gravity="center"
android:text="设置中心"
android:textSize="22sp" /&
&com.frank.mobilesafe.ui.SettingItemView
android:id="@+id/siv_update"
android:layout_width="match_parent"
android:layout_height="wrap_content"
&/LinearLayout&
4、主界面调用
public class SettingActivity extends Activity {
private SettingItemView siv_
private SharedPreferences sp_
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_setting);
siv_update = (SettingItemView) findViewById(R.id.siv_update);
sp_update = getSharedPreferences("config",MODE_PRIVATE);
update = sp_update.getBoolean("update", false);
if (update) {
siv_update.SetChecked(true);
siv_update.SetDesc("有新版本则更新");
siv_update.SetChecked(false);
siv_update.SetDesc("停止更新");
siv_update.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Editor editor = sp_update.edit();
// TODO Auto-generated method stub
if (siv_update.isChecked()) {
siv_update.SetChecked(false);
siv_update.SetDesc("停止更新");
editor.putBoolean("update", false);
siv_update.SetChecked(true);
siv_update.SetDesc("有新版本则更新");
editor.putBoolean("update", true);
阅读(...) 评论()
微信账号:FrankCoder博主最新文章
博主热门文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)Android自定义Adapter的ListView的思路及代码
转载 & & 作者:
Android自定义Adapter的ListView的思路及代码,需要的朋友可以参考一下
&在开发中,我们经常使用到ListView这个控件。Android的API也提供了许多创建ListView适配器的快捷方式。例如ArrayAdapter、SimpleAdapter和SimpleCursorAdapter等。但你是否发现,如果采用这些系统自带的适配器,对于事件的响应只能局限在一个行单位。假设一行里面有一个按钮和一个图片控件,它们之间的响应操作是不一样的。若采用系统自带的适配器,就不能精确到每个控件的响应事件。这时,我们一般采取自定义适配器来实现这个比较精确地请求。
ListView的创建,一般要具备两大元素:
&&&&&& 1)数据集,即要映射的字符串、图片信息之类。
&&&&&& 2)适配器,实现把要映射的字符串、图片信息映射成视图(如Textview、Image等组件),再添加到ListView中。
实现细节:
&&&&&& 1、创建数据集,一般定义如下 代码如下:&private List&Map&String, Object&& listI元素添加方式: 代码如下:&&&&&& Map&String, Object& map = new HashMap&String, Object&();&&&&&&
& map.put("image", imgeIDs[i]);&&&&&&&&& //图片资源&&&&
&&& map.put("title", "物品名称:");&&&&&&&&&& //物品标题&&&&&&&
map.put("info", goodsNames[i]);&&&&& //物品名称&&&&
&&& map.put("detail", goodsDetails[i]);&& //物品详情&&&&&&
& listItems.add(map);&&&&&&&&&&&&&&&&&&&&&&&& //添加一项
2、创建适配器 代码如下:&&&&&& public class ListViewAdapter extends BaseAdapter{........}& //自定义的适配器一般继承BaseAdapter类
&&&&&&& listViewAdapter = new ListViewAdapter(this, listItems);3、给ListView设置适配器 代码如下:&&&&&& listView.setAdapter(listViewAdapter);4、这里还有个关键点,如何把list_item.xml布局作为一个视图,添加到listView中: 代码如下:&&&&&&& LayoutInflater listC&& //视图容器工厂
&&&&&&& listContainer = LayoutInflater.from(context); //创建视图容器工厂并设置上下文
&&&&&&& convertView = listContainer.inflate(R.layout.list_item, null);&& //创建list_item.xml布局文件的视图实例视图如下:
1)布局文件main.xml&&
代码如下:&?xmlversion="1.0"encoding="utf-8"?& &LinearLayoutxmlns:Android="http://schemas.android.com/apk/res/android" &&& Android:orientation="vertical" &&& Android:layout_width="fill_parent" &&& Android:layout_height="fill_parent"& &&& &!-- 结算 --& &&& &LinearLayoutAndroid:gravity="center_horizontal" &&& Android:orientation="horizontal"android:layout_width="fill_parent" &&& Android:layout_height="wrap_content"& &&& &TextViewAndroid:text="结算: " &&&&&&& Android:layout_width="wrap_content" &&&&&&& Android:layout_height="wrap_content"&& &&&&&&& Android:textColor="#FFFFFFFF"&& &&&&&&& Android:textSize="20px"/& &&& &ImageButtonAndroid:id="@+id/imgbt_sum"&& &&&&&&& Android:layout_width="40px" &&&&&&& Android:layout_height="40px" &&&&&&& Android:background = "@drawable/shopping"/& &&& &/LinearLayout& &&& &TextViewAndroid:text="商品列表: " &&&&&&& Android:layout_width="wrap_content" &&&&&&& Android:layout_height="wrap_content"&& &&&&&&& Android:textColor="#FFFFFFFF"/& &&& &!-- 商品列表 --&&& &&& &ListViewAndroid:id="@+id/list_goods"&& &&&&&&& Android:layout_width="fill_parent" &&&&&&& Android:layout_height="wrap_content"/& &/LinearLayout& & 列表项布局文件list_item.xml&&&& &
代码如下:& &?xmlversion="1.0"encoding="utf-8"?& &LinearLayoutxmlns:Android="http://schemas.android.com/apk/res/android" &&& Android:orientation="horizontal"android:layout_width="fill_parent" &&& Android:layout_height="fill_parent"& &&& &!-- 商品图片 --& &&& &ImageViewAndroid:id="@+id/imageItem"&& &&&&&&& Android:layout_width="wrap_content" &&&&&&& Android:layout_height="wrap_content"&& &&&&&&& Android:layout_margin="5px"/& &&& &!-- 商品信息 --& &&& &LinearLayoutAndroid:orientation="vertical" &&&&&&& Android:layout_width="wrap_content"&& &&&&&&& Android:layout_height="wrap_content"& &&&&&&& &TextViewAndroid:id="@+id/titleItem"&& &&&&&&&&&&& Android:layout_width="wrap_content" &&&&&&&&&&& Android:layout_height="wrap_content"&& &&&&&&&&&&& Android:textColor="#FFFFFFFF" &&&&&&&&&&& Android:textSize="13px"/& &&&&&&& &TextViewAndroid:id="@+id/infoItem"&& &&&&&&&&&&& Android:layout_width="wrap_content" &&&&&&&&&&& Android:layout_height="wrap_content"&& &&&&&&&&&&& Android:textColor="#FFFFFFFF" &&&&&&&&&&& Android:textSize="22px"/& &&& &/LinearLayout& &&& &!-- 购买和商品详情 --& &&& &LinearLayoutAndroid:gravity="right" &&& Android:orientation="horizontal"android:layout_width="fill_parent" &&& Android:layout_height="wrap_content"& &&& &CheckBoxAndroid:id="@+id/checkItem"&& &&&&&&& Android:layout_width="wrap_content" &&&&&&& Android:layout_height="wrap_content"&& &&&&&&& Android:layout_margin="5px"/& &&& &Button& Android:id="@+id/detailItem"&& &&&&&&& Android:layout_width="wrap_content" &&&&&&& Android:layout_height="wrap_content"&& &&&&&&& Android:layout_margin="5px"/& &&& &/LinearLayout& &/LinearLayout& &
&& 2)代码,主代码:&&
代码如下:package com.myAndroid.& import java.util.ArrayL& import java.util.HashM& import java.util.L& import java.util.M& import Android.app.A& import Android.app.AlertD& import Android.content.DialogI& import Android.os.B& import Android.view.V& import Android.view.View.OnClickL& import Android.widget.ArrayA& import Android.widget.ImageB& import Android.widget.ListV& publicclass MyListView extends Activity {& &&& private ListView listV& &&& private ImageButton imgbt_& &&& private ListViewAdapter listViewA& &&& private List&Map&String, Object&& listI& &&& private Integer[] imgeIDs = {R.drawable.cake,&& &&&&&&&&&&& R.drawable.gift, R.drawable.letter,& &&&&&&&&&&& R.drawable.love, R.drawable.mouse,& &&&&&&&&&&& R.drawable.music};& &&& private String[] goodsNames = {"蛋糕", "礼物",&& &&&&&&&&&&& "邮票", "爱心", "鼠标", "音乐CD"};& &&& private String[] goodsDetails = {& &&&&&&&&&&& "蛋糕:好好吃。",&& &&&&&&&&&&& "礼物:礼轻情重。",&& &&&&&&&&&&& "邮票:环游世界。",&& &&&&&&&&&&& "爱心:世界都有爱。",& &&&&&&&&&&& "鼠标:反应敏捷。",& &&&&&&&&&&& "音乐CD:酷我音乐。"};& &&& /** Called when the activity is first created. */ &&& @Override &&& publicvoid onCreate(Bundle savedInstanceState) {& &&&&&&& super.onCreate(savedInstanceState);& &&&&&&& setContentView(R.layout.main);& &&&&&&& listView = (ListView)findViewById(R.id.list_goods);&& &&&&&&& imgbt_sum = (ImageButton) findViewById(R.id.imgbt_sum);& &&&&&&& imgbt_sum.setOnClickListener(new ClickEvent());& &&&&&&& listItems = getListItems();& &&&&&&& listViewAdapter = new ListViewAdapter(this, listItems); //创建适配器& &&&&&&& listView.setAdapter(listViewAdapter);& &&& }& &&& /**&&&& * 初始化商品信息&&&& */ &&& private List&Map&String, Object&& getListItems() {& &&&&&&& List&Map&String, Object&& listItems = new ArrayList&Map&String, Object&&();& &&&&&&& for(int i = 0; i & goodsNames. i++) {& &&&&&&&&&&& Map&String, Object& map = new HashMap&String, Object&();&& &&&&&&&&&&& map.put("image", imgeIDs[i]);&&&&&&&&&&&&&& //图片资源& &&&&&&&&&&& map.put("title", "物品名称:");&&&&&&&&&&&&& //物品标题& &&&&&&&&&&& map.put("info", goodsNames[i]);&&&& //物品名称& &&&&&&&&&&& map.put("detail", goodsDetails[i]); //物品详情& &&&&&&&&&&& listItems.add(map);& &&&&&&& }&&&& &&&&&&& return listI& &&& }& &&& class ClickEvent implements OnClickListener{& &&&&&&& @Override &&&&&&& publicvoid onClick(View v) {& &&&&&&&&&&& // TODO Auto-generated method stub& &&&&&&&&&&& String goodsList = "";& &&&&&&&&&&& for(int i = 0; i & listItems.size(); i++) {& &&&&&&&&&&&&&&& goodsList += listViewAdapter.hasChecked(i)? goodsNames[i] + "& ": "";& &&&&&&&&&&& }& &&&&&&&&&&& new AlertDialog.Builder(MyListView.this)& &&&&&&&&&&& .setTitle("购物清单:")& &&&&&&&&&&& .setMessage("你好,你选择了如下商品:\n" + goodsList)& &&&&&&&&&&& .setPositiveButton("确定", null)& &&&&&&&&&&& .show();& &&&&&&& }& &&& }& }&
适配器代码: 代码如下:package com.myAndroid.& import java.util.L& import java.util.M& import Android.app.AlertD& import Android.content.C& import Android.util.L& import Android.view.LayoutI& import Android.view.V& import Android.view.ViewG& import Android.widget.BaseA& import Android.widget.B& import Android.widget.CheckB& import Android.widget.CompoundB& import Android.widget.ImageV& import Android.widget.ListV& import Android.widget.TextV& publicclass ListViewAdapter extends BaseAdapter {& &&& private C&&&&&&&&&&&&&&&&&&&&&&& //运行上下文& &&& private List&Map&String, Object&& listI&&& //商品信息集合& &&& private LayoutInflater listC&&&&&&&&&& //视图容器& &&& privateboolean[] hasC&&&&&&&&&&&&&&&&&& //记录商品选中状态& &&& publicfinalclass ListItemView{&&&&&&&&&&&&&&& //自定义控件集合&&& &&&&&&&&&&& public ImageV&&& &&&&&&&&&&& public TextV&&& &&&&&&&&&&& public TextV& &&&&&&&&&&& public CheckB& &&&&&&&&&&& public B&&&&&&&& &&&& }&&& &&&&& &&& public ListViewAdapter(Context context, List&Map&String, Object&& listItems) {& &&&&&&& this.context =&&&&&&&&&& &&&&&&& listContainer = LayoutInflater.from(context);&& //创建视图容器并设置上下文& &&&&&&& this.listItems = listI& &&&&&&& hasChecked = newboolean[getCount()];& &&& }& &&& publicint getCount() {& &&&&&&& // TODO Auto-generated method stub& &&&&&&& return listItems.size();& &&& }& &&& public Object getItem(int arg0) {& &&&&&&& // TODO Auto-generated method stub& &&&&&&&& &&& }& &&& publiclong getItemId(int arg0) {& &&&&&&& // TODO Auto-generated method stub& &&&&&&& return0;& &&& }& &&& /**&&&& * 记录勾选了哪个物品&&&& * @param checkedID 选中的物品序号&&&& */ &&& privatevoid checkedChange(int checkedID) {& &&&&&&& hasChecked[checkedID] = !hasChecked[checkedID];& &&& }& &&& /**&&&& * 判断物品是否选择&&&& * @param checkedID 物品序号&&&& * @return 返回是否选中状态&&&& */ &&& publicboolean hasChecked(int checkedID) {& &&&&&&& return hasChecked[checkedID];& &&& }& &&& /**&&&& * 显示物品详情&&&& * @param clickID&&&& */ &&& privatevoid showDetailInfo(int clickID) {& &&&&&&& new AlertDialog.Builder(context)& &&&&&&& .setTitle("物品详情:" + listItems.get(clickID).get("info"))& &&&&&&& .setMessage(listItems.get(clickID).get("detail").toString())&&&&&&&&&&&&&&& &&&&&&& .setPositiveButton("确定", null)& &&&&&&& .show();& &&& }& &&&&&&&& &&& /**&&&& * ListView Item设置&&&& */ &&& public View getView(int position, View convertView, ViewGroup parent) {& &&&&&&& // TODO Auto-generated method stub& &&&&&&& Log.e("method", "getView");& &&&&&&& finalint selectID =& &&&&&&& //自定义视图& &&&&&&& ListItemView& listItemView =& &&&&&&& if (convertView == null) {& &&&&&&&&&&& listItemView = new ListItemView();&& &&&&&&&&&&& //获取list_item布局文件的视图& &&&&&&&&&&& convertView = listContainer.inflate(R.layout.list_item, null);& &&&&&&&&&&& //获取控件对象& &&&&&&&&&&& listItemView.image = (ImageView)convertView.findViewById(R.id.imageItem);& &&&&&&&&&&& listItemView.title = (TextView)convertView.findViewById(R.id.titleItem);& &&&&&&&&&&& listItemView.info = (TextView)convertView.findViewById(R.id.infoItem);& &&&&&&&&&&& listItemView.detail= (Button)convertView.findViewById(R.id.detailItem);& &&&&&&&&&&& listItemView.check = (CheckBox)convertView.findViewById(R.id.checkItem);& &&&&&&&&&&& //设置控件集到convertView& &&&&&&&&&&& convertView.setTag(listItemView);& &&&&&&& }else {& &&&&&&&&&&& listItemView = (ListItemView)convertView.getTag();& &&&&&&& }& //&&&&& Log.e("image", (String) listItems.get(position).get("title"));& //测试& //&&&&& Log.e("image", (String) listItems.get(position).get("info"));& &&&&&&& //设置文字和图片& &&&&&&& listItemView.image.setBackgroundResource((Integer) listItems.get(& &&&&&&&&&&&&&&& position).get("image"));& &&&&&&& listItemView.title.setText((String) listItems.get(position)& &&&&&&&&&&&&&&& .get("title"));& &&&&&&& listItemView.info.setText((String) listItems.get(position).get("info"));& &&&&&&& listItemView.detail.setText("商品详情");& &&&&&&& //注册按钮点击时间爱你& &&&&&&& listItemView.detail.setOnClickListener(new View.OnClickListener() {& &&&&&&&&&&& @Override &&&&&&&&&&& publicvoid onClick(View v) {& &&&&&&&&&&&&&&& //显示物品详情& &&&&&&&&&&&&&&& showDetailInfo(selectID);& &&&&&&&&&&& }& &&&&&&& });& &&&&&&& // 注册多选框状态事件处理& &&&&&&& listItemView.check& &&&&&&&&&&&&&&& .setOnCheckedChangeListener(new CheckBox.OnCheckedChangeListener() {& &&&&&&&&&&&&&&&&&&& @Override &&&&&&&&&&&&&&&&&&& publicvoid onCheckedChanged(CompoundButton buttonView,& &&&&&&&&&&&&&&&&&&&&&&&&&&& boolean isChecked) {& &&&&&&&&&&&&&&&&&&&&&&& //记录物品选中状态& &&&&&&&&&&&&&&&&&&&&&&& checkedChange(selectID);& &&&&&&&&&&&&&&&&&&& }& &&&&&&& });& &&&&&&& return convertV& &&& }& }
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具实例讲解Android应用中自定义组合控件的方法
转载 & & 作者:Zane96
这篇文章主要介绍了实例讲解Android应用中自定义组合控件的方法,通过例子讲解了view组合控件及自定义属性的用法,需要的朋友可以参考下
自定义view大概可以分成:
自己画的view(用paint和canvas)
自定义viewgroup(widget)
最近又跟同学聊起来了,于是就准备自己实现一个imagebutton来练练手。(最简单的了)以及后面一个把imageview与textview结合使用的案例。
ImageButton
要实现ImageButton最容易想到的不就是把button和imageview合在一起么。嗯,人容易就想到这是一个组合自定义view。可是如何把一个image放到button上呢,自然就是用一个FrameLayout把button和imageview包裹起来,然后将这个layout当作一个weidgt。把一个layout当成一个控件我开始不太理解。后来了解到一些东西。
补充知识点(安卓的顶层视图)
在android里面,你的app界面的活动的视图并非是最顶级的视图。大家应该都知道viewtree。在安卓里面,最顶级的视图是一个叫DecorView的东西。它包括你的状态栏,标题栏,以及你的活动界面。而且这个活动界面,安卓会自动帮你提前弄进去一个FrameLayout。可以这么理解吧,在安卓这个上帝的面前,你的activity就是放在他的framelayout的一个个view。上一张图~
DecorView-&LinearLayout(状态栏和activity)-&FrameLayout(activity)-&你自己的acitivty视图。
好啦,回归正题。我上代码了。
myimagebutton_layout.xml
&FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"&
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/button_imagebutton"
&ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/imageview_button"
&/FrameLayout&
用一个framelayout把两个控件装起来,然后组合。组合了之后我们就去自定义我们这个控件的属性。button不用变对吧,用原生的就好了,就是需要有一个图片的src这个属性就好了。
在values目录下的attrs.xml文件_
&?xml version="1.0" encoding="utf-8"?&
&resources&在
&declare-styleable name="MyImageButton"&
&attr name="Imagesrc" format="reference"/&
&/declare-styleable&
&/resources&
一般来说,declare-styleable标签的名字都是你的自定义控件的名字。attr就是你的自定义控件属性。format是这个属性的值的数据类型。这里的reference表示引用。dimension表示的是dp或者sp的大小。还有一些可以自己去看看。定义好属性,我们就开始写控件了。
MyImageButton.java
public class MyImageButton2 extends FrameLayout{
ImageView mImageV
int resId;
public MyImageButton2(Context context) {
super(context);
public MyImageButton2(Context context, AttributeSet attrs) {
super(context, attrs);
//导入布局
LayoutInflater.from(context).inflate(R.layout.myimagebutton_layout, this);
mImageView=(ImageView)findViewById(R.id.imageview_button);
mButton = (Button) findViewById(R.id.button_imagebutton);
//获得这个控件对应的属性。
TypedArray a = getContext().obtainStyledAttributes(attrs, R.styleable.MyImageButton);
//获得属性值
resId = a.getResourceId(R.styleable.MyImageButton_Imagesrc, 0);
}finally {
//回收这个对象
a.recycle();
if(resId != 0){
mImageView.setImageResource(resId);
public void setImage(int resId){
mImageView.setImageResource(resId);
一般来说,继承view(就这么说吧,反正都是都是继承view的),实现两三个构造函数就可以了。在第二个里面有一个attr,这就是传进来的属性。如果resId不为默认值,就表示用户在xml里面传入了这个属性值,你也必须要写一个set方法,让用户可以在java代码中去改变属性值。
test.myimagebutton.layout.xml_
&LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"&
&com.example.think.testview.customview.MyImageButton2
xmlns:pt = "http://schemas.android.com/apk/res/com.example.think.testview"
android:layout_height="100dp"
android:layout_width="match_parent"
pt:Imagesrc = "@drawable/ic_launcher"
&/LinearLayout&
另一个实例
这里我们来看一个view组合控件的例子:
&string-array name="bao_type"&
&item&测试1&/item&
&item&测试2&/item&
&item&测试3&/item&
&item&测试4&/item&
&/string-array&
&?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:background="@color/gray_common_background"
android:orientation="vertical"&
&LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"&
android:id="@+id/txt_viewpage_bar1"
style="@style/style_common_pagebar"
android:textColor="@color/theme_red" /&
android:id="@+id/txt_viewpage_bar2"
style="@style/style_common_pagebar" /&
android:id="@+id/txt_viewpage_bar3"
style="@style/style_common_pagebar" /&
android:id="@+id/txt_viewpage_bar4"
style="@style/style_common_pagebar" /&
&/LinearLayout&
&LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"&
android:id="@+id/view_viewpage_bar1"
style="@style/style_common_pagebar_view" /&
android:id="@+id/view_viewpage_bar2"
style="@style/style_common_pagebar_view" /&
android:id="@+id/view_viewpage_bar3"
style="@style/style_common_pagebar_view" /&
android:id="@+id/view_viewpage_bar4"
style="@style/style_common_pagebar_view" /&
&/LinearLayout&
&android.support.v4.view.ViewPager
android:id="@+id/common_viewpage_buttom"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1" /&
&/LinearLayout&
public interface SlbPageViewOnPageChangeListener {
void onPageSelected(int position);
void onPageScrollStateChanged(int state);
public class SlbPageViewBar extends LinearLayout {
private TextView[] mTotalTxtV
private View[] mTotalV
private List&TextView& mTxtV
private List&View& mV
private ViewPager mViewP
private SlbPageViewOnPageChangeListener mSlbPageViewOnPageChangeL
public SlbPageViewBar(Context context, AttributeSet attrs) {
super(context, attrs);
mTotalTxtViews = new TextView[4];
mTotalViews = new View[4];
mTxtViews = new ArrayList&&();
mViews = new ArrayList&&();
initView();
private void initView() {
View.inflate(getContext(), R.layout.layout_common_top_pageview_bar, this);
mViewPager = (ViewPager) findViewById(R.id.common_viewpage_buttom);
mTotalTxtViews[0] = (TextView) findViewById(R.id.txt_viewpage_bar1);
mTotalTxtViews[1] = (TextView) findViewById(R.id.txt_viewpage_bar2);
mTotalTxtViews[2] = (TextView) findViewById(R.id.txt_viewpage_bar3);
mTotalTxtViews[3] = (TextView) findViewById(R.id.txt_viewpage_bar4);
mTotalViews[0] = findViewById(R.id.view_viewpage_bar1);
mTotalViews[1] = findViewById(R.id.view_viewpage_bar2);
mTotalViews[2] = findViewById(R.id.view_viewpage_bar3);
mTotalViews[3] = findViewById(R.id.view_viewpage_bar4);
* @param title 标题名称数组
public void setTitleView(String[] title) {
int legth = title.length & 4 ? 4 : title.
for (int i = 0; i & i++) {
mTotalTxtViews[i].setText(title[i]);
mTotalTxtViews[i].setVisibility(View.VISIBLE);
mTotalViews[i].setVisibility(View.INVISIBLE);
mTotalTxtViews[i].setOnClickListener(new SlbTextViewOnLister(i));
mTxtViews.add(mTotalTxtViews[i]);
mViews.add(mTotalViews[i]);
mTotalViews[0].setVisibility(View.VISIBLE);
mViewPager.setOnPageChangeListener(mOnButtomPageChangeListener);
public ViewPager getViewPager(){
return mViewP
public void setSlbPageViewOnPageChangeListener(SlbPageViewOnPageChangeListener slbPageViewOnPageChangeListener) {
this.mSlbPageViewOnPageChangeListener = slbPageViewOnPageChangeL
private void changeViewBg(int textViewId, int viewId) {
for (View view : mViews) {
if (viewId == view.getId()) {
view.setVisibility(View.VISIBLE);
view.setVisibility(View.INVISIBLE);
for (TextView view : mTxtViews) {
if (textViewId == view.getId()) {
view.setTextColor(getResources().getColor(R.color.theme_red));
view.setTextColor(getResources().getColor(R.color.black_normal_text_33333));
class SlbTextViewOnLister implements OnClickListener {
private int mI
public SlbTextViewOnLister(int item) {
this.mItem =
public void onClick(View v) {
mViewPager.setCurrentItem(mItem);
private ViewPager.OnPageChangeListener mOnButtomPageChangeListener = new ViewPager.OnPageChangeListener() {
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
public void onPageSelected(int position) {
switch (position) {
changeViewBg(R.id.txt_viewpage_bar1, R.id.view_viewpage_bar1);
changeViewBg(R.id.txt_viewpage_bar2, R.id.view_viewpage_bar2);
changeViewBg(R.id.txt_viewpage_bar3, R.id.view_viewpage_bar3);
changeViewBg(R.id.txt_viewpage_bar4, R.id.view_viewpage_bar4);
if (mSlbPageViewOnPageChangeListener != null)
mSlbPageViewOnPageChangeListener.onPageSelected(position);
public void onPageScrollStateChanged(int state) {
if (mSlbPageViewOnPageChangeListener != null)
mSlbPageViewOnPageChangeListener.onPageScrollStateChanged(state);
public class CommonViewpageAdapter extends FragmentPagerAdapter {
private List&Fragment& mF
private String [] mT
public CommonViewpageAdapter(FragmentManager fm, List&Fragment& fragments, String [] titles) {
super(fm);
mFragments =
public Fragment getItem(int position) {
return mFragments.get(position);
public int getCount() {
return mFragments.size();
public CharSequence getPageTitle(int position) {
return mTitles[position];
public void destroyItem(ViewGroup container, int position, Object object) {
super.destroyItem(container, position, object);
&com.slfinance.app.slb.common.ui.view.SlbPageViewBar
android:id="@+id/slbpv_buy_huoqibao_SlbPageViewBarshow"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"/&
private void initButtomPageFragment(SlbPageViewBar slbPageViewBar) {
List&Fragment& fragmentList = new ArrayList&&();
Test1Fragment test1Fragment = new Test1Fragment();
Test2Fragment test2Fragment = new Test2Fragment();
Test3Fragment test3Fragment = new Test3Fragment();
Test4Fragment test4Fragment = new Test4Fragment();
fragmentList.add(test1Fragment);
fragmentList.add(test2Fragment);
fragmentList.add(test3Fragment);
fragmentList.add(test4Fragment);
String[] titles = getResources().getStringArray(R.array.buy_huoqi_bao_zanquan_detail);
slbPageViewBar.setTitleView(titles);
CommonViewpageAdapter viewPagerAdapter = new CommonViewpageAdapter(
getSupportFragmentManager(), fragmentList, titles);
mButtomPageView.setAdapter(viewPagerAdapter);
mButtomPageView.setOffscreenPageLimit(3);
mButtomPageView.setCurrentItem(0);
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具

我要回帖

更多关于 android 自定义item 的文章

 

随机推荐