Android学习笔记——ListView
来源:互联网 发布:php 访问者模式 编辑:程序博客网 时间:2024/06/06 03:04
为了满足公司项目的需求做一个类似于苹果上UITabelView列表的编辑删除功能,整了好久总算弄出来了,虽然还有点小毛病,就是红色删除按钮显示的时候,Item上的内容没有整体左移,但是主要功能还是实现了,记录下先。。。。
BalancePlanHomeActivity.java页面代码如下:
import android.content.DialogInterface;import android.content.Intent;import android.os.Bundle;import android.view.View;import android.widget.ListView;import com.lidroid.xutils.ViewUtils;import com.lidroid.xutils.http.RequestParams;import com.lidroid.xutils.view.annotation.ViewInject;import java.util.ArrayList;import java.util.List;public class BalancePlanHomeActivity extends BaseActivity {//BaseActivity为基类 @ViewInject(R.id.lv_balance_home) private ListView balanceHomeListView; //是否为编辑状态,为true时,每个item上的删除按钮都显示出来,“编辑”按钮文字变为“完成”;否则,反之。private boolean isEditState; private List<BalancePlanInfoBean> listInfos = new ArrayList<BalancePlanInfoBean>();//listview的显示数据private BalanceHomeListAdapter balanceHomeListAdapter; //listview适配器@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentLayout(R.layout.balance_home); ViewUtils.inject(this); setTitle(getString(R.string.title_plan)); balanceHomeListAdapter = new BalanceHomeListAdapter(BalancePlanHomeActivity.this); balanceHomeListView.setAdapter(balanceHomeListAdapter); isEditState = false; addClickListener();} private void addClickListener(){ findViewById(R.id.tv_title_right).setOnClickListener(this); }@Override public void onClick(View v) { super.onClick(v); switch (v.getId()){ case R.id.tv_title_right: onEditTextViewClicked(); break; default:break; } } //编辑按钮点击事件 private void onEditTextViewClicked() { isEditState = !isEditState; if (isEditState){ setTvRightRes(R.string.list_finish);balanceHomeListAdapter.setShowDeleteView(true); }else { setTvRightRes(R.string.list_edit); balanceHomeListAdapter.setShowDeleteView(false); } balanceHomeListAdapter.notifyDataSetChanged(); } @Override protected void onResume() { super.onResume(); initData();//初始化数据 } @Override protected void onPause() { isEditState = true; onEditTextViewClicked(); super.onPause(); } //初始化数据 private void initData() { clearDatas(); RequestParams params = getRequestParams(); if (params == null) return; showProgressDialog(); HttpRequestFactory.sendBalancePlansRequest(BalancePlanHomeActivity.this, params, new HttpRequestListener<List<BalancePlanInfoBean>>() { @Override public void doSuccess(BaseBean<List<BalancePlanInfoBean>> result) { dismissProgressDialog(); if (result == null || result.getData() == null) { showHintDialog(R.string.no_data); return; } listInfos.addAll(result.getData()); balanceHomeListAdapter.notifyDataSetChanged(listInfos);//刷新listview addListItemClickListener();//实现listview上item的所有监听事件 } @Override public void doFailed(BaseBean<List<BalancePlanInfoBean>> result) { dismissProgressDialog(); showHintDialog(result.getMsg()); } }); } private void clearDatas(){//清除数据 listInfos.clear(); balanceHomeListAdapter.getPlanInfoBeans().clear(); balanceHomeListAdapter.notifyDataSetChanged(); } private RequestParams getRequestParams() { RequestParams params = new RequestParams(); AccountBean account = HqtApplication.getAccount(); if (account == null) { gotoLoginActivity(NormalLoginActivity.class, true); return null; } params.addBodyParameter("userId", account.getUserId()); return params; } private void addListItemClickListener() { balanceHomeListAdapter.setOnItemClickListener(new BalanceHomeListAdapter.OnItemClickListener() { @Override public void detail(BalancePlanInfoBean plan) {//item上详情按钮事件(跳转至详情页)} @Override public void modify(BalancePlanInfoBean planInfoBean) {//item上修改按钮事件(跳转至修改页面) } @Override public void stop(BalancePlanInfoBean planInfoBean, BalanceHomeListAdapter.ViewHolder viewHolder) { //item上终止按钮事件} @Override public void records(BalancePlanInfoBean planInfoBean) { //item上历史记录按钮事件 } }); }}
此Activity对应的布局文件如下 :
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" style="@style/root_layout_padding_style"> <ListView android:id="@+id/lv_balance_home" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="@dimen/tabrow_margin_top" android:divider="@null" android:dividerHeight="0dp" android:drawSelectorOnTop="false" android:scrollbars="none"> </ListView></LinearLayout>
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="wrap_content" android:background="@color/transparent" android:gravity="center_vertical" android:orientation="horizontal"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="@dimen/cell_padding_top_bottom" android:background="@color/white" android:gravity="center_vertical" android:orientation="horizontal"> <ImageView android:id="@+id/img_delete" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="@dimen/tabrow_edt_padding_left" android:layout_marginRight="@dimen/tabrow_edt_padding_left" android:src="@drawable/edit" android:visibility="gone" /> <LinearLayout android:id="@+id/layout_balance_home_cell" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="0.8" android:orientation="vertical" android:gravity="top|left"> <!--<include layout="@layout/horizontal_split_line" />--> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:layout_marginLeft="@dimen/table_padding_left" android:paddingBottom="@dimen/cell_padding_top_bottom" android:paddingTop="@dimen/cell_padding_top_bottom" android:layout_marginRight="@dimen/table_padding_right"> <ImageView android:id="@+id/img_bank" android:layout_width="@dimen/bank_image_size" android:layout_height="@dimen/bank_image_size" android:src="@drawable/icon_default_bank" /> <TableLayout style="@style/table_style"> <TextView android:id="@+id/tv_bank_name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="@color/left_text_black" android:textSize="@dimen/font_size_large"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:drawableRight="@drawable/more_right_arrow" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:paddingLeft="0dp" android:layout_marginTop="0dp"> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal" android:layout_weight="1" android:gravity="left"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/balance_home_remain" android:textSize="@dimen/font_size_middle" android:textColor="@color/left_text_black"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/buy_apply_amount_unit" android:textSize="@dimen/font_size_extra_small" /> <TextView android:id="@+id/tv_remain_amount" android:layout_width="wrap_content" android:layout_height="wrap_content" android:paddingLeft="@dimen/tv_text_image_padding" android:textColor="@color/left_text_black" android:textStyle="bold" android:textSize="@dimen/font_size_large" android:ellipsize="end" android:singleLine="true"/> </LinearLayout> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal" android:layout_weight="1" android:paddingLeft="@dimen/table_padding_left"> <TextView android:id="@+id/tv_tips" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/balance_home_repay" android:textColor="@color/left_text_black" android:textSize="@dimen/font_size_middle"/> <TextView android:id="@+id/tv_trade_date" android:layout_width="wrap_content" android:layout_height="wrap_content" android:paddingLeft="@dimen/tv_text_image_padding" android:textColor="@color/state_and_date_color_red" android:textSize="@dimen/font_size_middle" android:ellipsize="end" android:singleLine="true"/> </LinearLayout> </LinearLayout> </TableLayout> </LinearLayout> <include layout="@layout/horizontal_split_line" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:orientation="horizontal"> <TextView android:id="@+id/tv_modify_plan" style="@style/cell_btn_style" android:text="@string/tv_repay_modify_text" /> <include layout="@layout/vertical_separator_line" /> <TextView android:id="@+id/tv_plans_record" style="@style/cell_btn_style" android:text="@string/tv_credit_card_record_text" android:layout_marginRight="@dimen/table_padding_right" android:drawableRight="@drawable/more_right_arrow"/> </LinearLayout> <!--<include layout="@layout/horizontal_split_line" />--> </LinearLayout> <TextView android:id="@+id/tv_delete" android:layout_width="90dp" android:layout_height="match_parent" android:layout_weight="0.2" android:background="@color/tab_text_pressed_color_red" android:gravity="center" android:text="@string/delete" android:textColor="@color/text_white" android:textSize="@dimen/font_size_extra_large" android:visibility="gone" /> </LinearLayout></LinearLayout>
自定义ListView的适配器代码如下;
import android.content.Context;import android.view.LayoutInflater;import android.view.View;import android.view.View.OnClickListener;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.ImageView;import android.widget.LinearLayout;import android.widget.TextView;import java.util.ArrayList;import java.util.List;public class BalanceHomeListAdapter extends BaseAdapter { private Context mContext; private LayoutInflater inflater; private List<BalancePlanInfoBean> planInfoBeans;//listview显示的数据 private OnItemClickListener onItemClickListener; public boolean isShowDeleteView;//是否显示删除按钮 public boolean isShowDeleteView() { return isShowDeleteView; } public void setShowDeleteView(boolean isShowDeleteView) { this.isShowDeleteView = isShowDeleteView; } public void setOnItemClickListener(OnItemClickListener onItemClickListener) { this.onItemClickListener = onItemClickListener; } public BalanceHomeListAdapter(Context mContext) { this.mContext = mContext; inflater = LayoutInflater.from(mContext); } public BalanceHomeListAdapter(Context context, List<BalancePlanInfoBean> lists) { this.mContext = context; inflater = LayoutInflater.from(context); if (this.planInfoBeans != null){ this.planInfoBeans.clear(); }else { planInfoBeans = new ArrayList<BalancePlanInfoBean>(); } this.planInfoBeans.addAll(lists); } //更新数据 public void notifyDataSetChanged(List<BalancePlanInfoBean> list) { if (this.planInfoBeans != null){ this.planInfoBeans.clear(); }else { planInfoBeans = new ArrayList<BalancePlanInfoBean>(); } this.planInfoBeans.addAll(list); super.notifyDataSetChanged(); } @Override public int getCount() {//获取item总数 return planInfoBeans == null ? 0 : planInfoBeans.size(); } @Override public Object getItem(int position) {//获取指定位置position的item return planInfoBeans.get(position); } @Override public long getItemId(int position) {//获取指定<span style="font-family: Arial, Helvetica, sans-serif;">位置position的itemId</span> return position; } @Override public View getView(int position, View convertView, ViewGroup parent) {//获取每一项item视图 if (convertView == null) { convertView = inflater.inflate(R.layout.balance_home_item, null); setupViews(convertView); } ViewHolder holder = (ViewHolder) convertView.getTag(); final BalancePlanInfoBean plan = planInfoBeans.get(position); setupDatas(plan, holder); addListenser(convertView, holder, plan); return convertView; } private void setupViews(View convertView) {//获得item上所有控件 ViewHolder holder = new ViewHolder(); holder.bankImageView = (ImageView) convertView.findViewById(R.id.img_bank); holder.bankNameTextView = (TextView) convertView.findViewById(R.id.tv_bank_name); holder.historyRecordTextView = (TextView) convertView.findViewById(R.id.tv_plans_record); holder.remainAmountTextView = (TextView) convertView.findViewById(R.id.tv_remain_amount); holder.deleteImageView = (ImageView)convertView.findViewById(R.id.img_delete); holder.deleteTextView = (TextView)convertView.findViewById(R.id.tv_delete); holder.cellLayout = (LinearLayout)convertView.findViewById(R.id.layout_balance_home_cell); holder.tradeDateTextView = (TextView)convertView.findViewById(R.id.tv_trade_date); holder.modifyPlanTextView = (TextView)convertView.findViewById(R.id.tv_modify_plan); convertView.setTag(holder); } private void setupDatas(BalancePlanInfoBean plan, ViewHolder holder){//设置item上显示数据 holder.bankImageView.setImageResource(FormatUtils.getBankImageResId(mContext, plan.getTrustChannelId())); holder.bankNameTextView.setText(plan.getBankAccountNoDisplay()); holder.remainAmountTextView.setText(plan.getRemainAmountDisplay()); holder.tradeDateTextView.setText(plan.getTradeDatesDisplay()); if (isShowDeleteView){ holder.deleteImageView.setVisibility(View.VISIBLE); }else { holder.deleteImageView.setVisibility(View.GONE); } } //绑定item上所有按钮的监听事件 private void addListenser(View convertView, final ViewHolder holder, final BalancePlanInfoBean planInfoBean) { convertView.setOnClickListener(new OnClickListener() { @Override public void onClick(View view) { onItemClickListener.detail(planInfoBean); } }); holder.historyRecordTextView.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if (((BalancePlanHomeActivity) mContext).clickToFast()) { return; } onItemClickListener.records(planInfoBean); } }); holder.modifyPlanTextView.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if (((BalancePlanHomeActivity) mContext).clickToFast()) { return; } onItemClickListener.modify(planInfoBean); } }); holder.deleteImageView.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if (((BalancePlanHomeActivity) mContext).clickToFast()) { return; } holder.deleteImageView.setVisibility(View.GONE); holder.deleteTextView.setVisibility(View.VISIBLE); } }); holder.deleteTextView.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if (((BalancePlanHomeActivity) mContext).clickToFast()) { return; } onItemClickListener.stop(planInfoBean, holder); } }); } public List<BalancePlanInfoBean> getPlanInfoBeans() { if (planInfoBeans == null){ planInfoBeans = new ArrayList<BalancePlanInfoBean>(); } return planInfoBeans; } public static class ViewHolder {//item上的所有控件 ImageView bankImageView; TextView bankNameTextView; TextView historyRecordTextView; TextView modifyPlanTextView; TextView remainAmountTextView; ImageView deleteImageView; LinearLayout cellLayout; public TextView deleteTextView; TextView tradeDateTextView; } public interface OnItemClickListener { //详情界面 void detail(BalancePlanInfoBean credit); //修改 void modify(BalancePlanInfoBean planInfoBean); //终止 void stop(BalancePlanInfoBean planInfoBean, ViewHolder viewHolder); //历史记录 void records(BalancePlanInfoBean planInfoBean); }}
0 0
- Android学习笔记——ListView
- Android学习笔记——ListView
- android学习笔记——ListView控件
- Android学习笔记--ListView
- Android ListView 学习笔记
- Android ListView学习笔记
- Android学习笔记-ListView
- Android开发————ListView学习笔记
- Android学习笔记8——常用控件ListView
- Android学习笔记(9)——ListView简介
- Android学习笔记(四)——ListView
- Android群英传学习笔记——ListView使用技巧
- android学习笔记——ListView的使用
- Android 学习笔记(9)—— ListView
- Android学习笔记(二)——两个ListView联动
- ListView的用法 - 第一行代码—android学习笔记
- android组件ListView学习笔记
- android学习笔记之ListView
- 【详解】SPI中的极性CPOL和相位CPHA是什么以及如何设置
- 汽车ABS转速传感器工作电压测量方法
- 搜索引擎营销与软文营销本是同根生
- 为rman建立catalog数据库
- 丢失所有控制文件,还原所有数据文件,不还原控制文件,recover database until cancel
- Android学习笔记——ListView
- 【黑马程序员】java基础_面向对象
- Python持久存储
- hibernate_Restrictions用法
- AppDelegate详解
- 如果看了此文你还不懂傅里叶变换,那就过来掐死我吧
- 第一次试验---八皇后问题和聚类思考
- DML、DDL、DCL区别
- cocosPods下载更新第三方时输入的代码,加上后面几句可以提高效率