以前就有用过自定义的ListView,不过很久没用过了,所以决定自己写一篇博客,以记录再次学习如何使用自定义的ListView,防止以后在此使用又忘了。本文中将实现一个在ListView中存放最多三个需要监听的ListView。
发现有个东西写 蛮不错的,引用一下,思路会清晰些:
这里其实是在一个ListFrament里面,使用了自定义的Listview,摸索了很久终于实现了自己想要的效果
第一步:首先主布局文件:
<?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" > <ListView android:layout_marginBottom="20dp" android:layout_marginLeft="5dp" android:layout_marginRight="5dp" android:id="@android:id/list" android:listSelector="#0000" android:layout_width="match_parent" android:layout_height="match_parent" ></ListView> </LinearLayout>
然后组件布局文件:
<?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:id="@+id/talent_analytics_top" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="20dp" android:text="人力结构分析" android:textStyle="bold" android:textSize="18dp" /> <!-- 第二排 3个Textview --> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:layout_marginTop="15dp" > <TextView android:id="@+id/talent_analytics_cen1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="职等结构" android:textColor="#14D7F1" android:textSize="14dp" /> <TextView android:id="@+id/talent_analytics_cen1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="25dp" android:text="年龄结构" android:textColor="#14D7F1" android:textSize="14dp" /> <TextView android:id="@+id/talent_analytics_cen1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="25dp" android:text="工作年限结构" android:textColor="#14D7F1" android:textSize="14dp" /> </LinearLayout> </LinearLayout>
第二步:1、新建一个适配器类,继承于BaseAdapter
package com.example.dayhr1_3; import java.util.List; import android.content.Context; import android.content.Intent; import android.net.Uri; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.webkit.WebView.FindListener; import android.widget.BaseAdapter; import android.widget.Button; import android.widget.ImageView; import android.widget.TextView; /** * 人力分析适配器 * @author wxm * */ public class APPAdapter extends BaseAdapter { //列表数据 public List<ApplictionInfo> appListViewData = null; public LayoutInflater layoutInflater = null; public Context ct; //构造函数 public APPAdapter(List<ApplictionInfo> app, Context ctx) { this.ct=ctx; appListViewData = app; this.layoutInflater=LayoutInflater.from(ct); } //列表需要显示多少行 @Override public int getCount() { // TODO Auto-generated method stub return appListViewData.size(); } @Override public Object getItem(int arg0) { // TODO Auto-generated method stub return appListViewData.get(arg0); } @Override public long getItemId(int arg0) { // TODO Auto-generated method stub return 0; } @Override public View getView(final int arg0, View arg1, ViewGroup arg2) { // TODO Auto-generated method stub //列表每一行需要显示的视图 View view = null; //列表中组件 ViewHolder viewGroup = null; if(arg1==null||arg1.getTag()==null) { view = layoutInflater.inflate(R.layout.main_talent_analytics_list, null); TextView text0=(TextView)view.findViewById(R.id.talent_analytics_top); TextView text1=(TextView)view.findViewById(R.id.talent_analytics_cen1); TextView text2=(TextView)view.findViewById(R.id.talent_analytics_cen2); TextView text3=(TextView)view.findViewById(R.id.talent_analytics_cen3); text1.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub // if(arg0==0){//添加一个判断,判断是点击了哪一列的,以做出对应的跳转下面的都雷同 Intent intent=new Intent(); intent.setClass(ct, OrgNavigationActivity_2.class); ct.startActivity(intent); } } }); text2.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub // Intent intent=new Intent(); intent.setClass(ct, OrgNavigationActivity_2.class); ct.startActivity(intent); } }); text3.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub // Intent intent=new Intent(); intent.setClass(ct, OrgNavigationActivity_2.class); ct.startActivity(intent); } }); viewGroup = new ViewHolder(view); view.setTag(viewGroup); }else { view = arg1; viewGroup = (ViewHolder) arg1.getTag(); } //把列表中数据添加到列表视图中 ApplictionInfo app = new ApplictionInfo(); app = (ApplictionInfo) getItem(arg0); viewGroup.text0.setText(app.gettext0()); viewGroup.text1.setText(app.gettext1()); viewGroup.text2.setText(app.gettext2()); viewGroup.text3.setText(app.gettext3()); return view; } //实例化列表中每一行的组件 class ViewHolder{ TextView text0; //程序图标 TextView text1; //程序图标 TextView text2; //程序名称 TextView text3; //程序包名 //构造方法 ViewHolder(View v){ this.text0 = (TextView)v.findViewById(R.id.talent_analytics_top); this.text1 = (TextView)v.findViewById(R.id.talent_analytics_cen1); this.text2 = (TextView)v.findViewById(R.id.talent_analytics_cen2); this.text3 = (TextView)v.findViewById(R.id.talent_analytics_cen3); } } }
第二步:2,新建一个操作类,applicationInfo
package com.example.dayhr1_3; import android.graphics.drawable.Drawable; public class ApplictionInfo { /* * 用来保存应用程序的类 */ public String text0;//1排1号位 public String text1;//1排1号位 public String text2;//1排2号位 public String text3;//1排3号位 public void settext0(String label) { this.text0 = label; } public String gettext0() { return text0; } /* * 设置1排1号位名称 */ public void settext1(String label) { this.text1=label; } /* * 获取1排1号位名称 */ public String gettext1() { return text1; } /* * 设置1排2号位名称 */ public void settext2(String label) { this.text2=label; } /* * 获取1排2号位名称 */ public String gettext2() { return text2; } /** * 设置1排2号位名称 * @param label */ public void settext3(String label) { this.text3 = label; } /** * 获取1排3号位名称 * @return */ public String gettext3() { return text3; } }
第三步:在ListFrament中
public APPAdapter appAdapter=null;
然后在新替换的layout下面添加一些语句
case 1:
gv1=R.layout.main_talent_analytics;
getActivity().setTitle("人力分析");
//由于这里是用的LIstFrament ,ListView的id的设置是 android:id="@android:id/list",不需要去findViewById,直接使用就好了
//创建适配器;
appAdapter = new APPAdapter(getlist(), getActivity());
//.添加适配器
setListAdapter(appAdapter);
break;
这里的getlist()代码如下:
private List<ApplictionInfo> getlist() { // TODO Auto-generated method stub List<ApplictionInfo> list = new ArrayList<ApplictionInfo>(); ArrayList<HashMap<String, Object>> list1=new ArrayList<HashMap<String,Object>>(); String text0[]={"人力结构分析","人工成本结构分析", "员工流动分析","超缺编分析" }; String text1[]={"职等结构","成本结构", "流入流出","超缺编分析" }; String text2[]={"年龄结构","组织分布", "入职结构",null }; String text3[]={"工作年限结构","职位体系分布", "离职结构",null }; for(int i=0;i<text1.length;i++){ ApplictionInfo info = new ApplictionInfo(); info.settext0(text0[i]); info.settext1(text1[i]); info.settext2(text2[i]); info.settext3(text3[i]); list.add(info); } return list; }
ok 到这里就完成了,为了让每个item 点击不变颜色,给Listview添加了一个属性android:listSelector="#0000", 然后每个it之前的黑线是写了一个LinearLayout,宽为父空间宽度高为0.5dp,背景色为#D5DCEE