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
原创粉丝点击