这个效果出现在我自己的应用掌上快递,上面的。历史记录查询
如上面效果图所表示,快递查询的历史记录分条保存在数据库中,然后查出来显示出来。
其中,整个界面用的ListActivity,自带listview。
1.我需要在上面添加自定义标题栏,于是我把listview拿出来了,把listview单独放在一个lieanrLayout中。如图所示:
historyactivity_layout.xml
<?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" >
<FrameLayout
android:layout_width="match_parent"
android:layout_height="60dp"
android:background="@drawable/tab_black_bg"
android:orientation="horizontal" >
<Button
android:id="@+id/checkpackage_backBtn"
android:layout_width="65dp"
android:layout_height="40dp"
android:layout_gravity="left|center_vertical"
android:layout_marginLeft="5dp"
android:background="@drawable/back_button_normal"
android:gravity="center|center_vertical"
android:paddingLeft="5dp"
android:text="返回"
android:textColor="#FFFFFF" />
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center|center_vertical"
android:text="查询历史"
android:textColor="#FFFFFF"
android:textSize="23sp"
android:textStyle="bold" />
</FrameLayout>
<LinearLayout
android:id="@+id/historydetailinfolayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#FFFFFF"
android:orientation="vertical" >
<ListView
android:id="@android:id/list"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:cacheColorHint="#00000000"
android:clickable="false"
android:divider="#C5C1AA"
android:dividerHeight="0dp"
android:scrollbarFadeDuration="300"
android:scrollbars="vertical" >
</ListView>
</LinearLayout>
</LinearLayout>
2.上面红色框框中,其实是一个整体,上面标题一个layout下面显示具体一个Layout包含一个textview,用于显示具体信息,然后通过事件监听控制展示还是隐藏。
checkpackagehisinfo_layout.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<RelativeLayout
android:id="@+id/titlelayout"
android:layout_width="fill_parent"
android:layout_height="60dp"
android:background="#FFFFFF"
android:paddingRight="10dp" >
<ImageView
android:id="@+id/workStatusImg"
android:layout_width="30dp"
android:layout_height="45dp"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:src="@drawable/mm_submenu_normal" />
<LinearLayout
android:id="@+id/leftlayout"
android:layout_width="match_parent"
android:layout_height="60dp"
android:layout_toLeftOf="@id/workStatusImg"
android:orientation="vertical" >
<TextView
android:id="@+id/his_companynamenumber"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:gravity="left|center_vertical"
android:paddingLeft="5dp"
android:text="圆通快递:1234567543"
android:textColor="#4F4F4F"
android:textSize="20sp" />
<TextView
android:id="@+id/his_checkpackagetime"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:gravity="left|center_vertical"
android:paddingLeft="5dp"
android:text="上次查询时间:"
android:textColor="#4F4F4F"
android:textSize="20sp" />
</LinearLayout>
</RelativeLayout>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="#838B8B" />
<LinearLayout
android:id="@+id/DetailLayout"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@drawable/work_detail_unfold_bg"
android:orientation="vertical" >
<TextView
android:id="@+id/detailinfotxt"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="left|center_vertical"
android:padding="5dp"
android:textColor="#4F4F4F" />
</LinearLayout>
</LinearLayout>
3.java逻辑代码
listview数据源使用List<Map<String, Object>> 这样,我每一条历史记录就是一个map,方便取数据。,
package com.aaa.checkpackage;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import android.app.AlertDialog;
import android.app.ListActivity;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.graphics.Color;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnTouchListener;
import android.view.ViewGroup;
import android.view.Window;
import android.widget.AbsListView;
import android.widget.AbsListView.OnScrollListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;
import com.xiangxm.cls.cls_savehistory;
import com.xiangxm.utils.Common;
public class CheckPackageHisActivity extends ListActivity implements
OnScrollListener, OnItemClickListener {
private LayoutInflater mLayoutInflater;
private MyAdapter adapter;
private boolean[] isSelectedItems;
/*** 数据源 */
private List<Map<String, Object>> contentDefileList;
/**返回按钮**/
private Button backBtn;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setUiOptions(
ActivityInfo.UIOPTION_SPLIT_ACTION_BAR_WHEN_NARROW);
setContentView(R.layout.historyactivity_layout);
mLayoutInflater = (LayoutInflater) this
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
initView();
this.setListAdapter(adapter);
this.getListView().setDivider(
getResources().getDrawable(R.color.transparent));
this.getListView().setOnScrollListener(this);
this.getListView().setOnItemClickListener(this);
}
/**
* 初始化数据
*/
private void initView() {
backBtn = (Button) findViewById(R.id.checkpackage_backBtn);
backBtn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent intent = new Intent();
intent.setClass(CheckPackageHisActivity.this,
MainActivity.class);
startActivity(intent);
overridePendingTransition(R.anim.slide_left, R.anim.slide_right);
CheckPackageHisActivity.this.finish();
}
});
changeBtnBackground();
contentDefileList = new ArrayList<Map<String, Object>>();
contentDefileList.addAll(cls_savehistory.getHistoryList(Common.dbh));
for (int i = 0; i < contentDefileList.size(); i++) {
contentDefileList.get(i).put("status", false);
}
isSelectedItems = new boolean[contentDefileList.size()];
for (int i = 0; i < isSelectedItems.length; i++) {
isSelectedItems[i] = false;
}
adapter = new MyAdapter(this, contentDefileList);
}
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
if (isSelectedItems[position]) {
isSelectedItems[position] = false;
} else {
isSelectedItems[position] = true;
}
adapter.notifyDataSetChanged();
}
/**
* 自定义适配器
*
* @author
*
*/
class MyAdapter extends BaseAdapter {
private Context context;
private List<Map<String, Object>> contentDefileList;
public MyAdapter(Context context,
List<Map<String, Object>> contentDefileList) {
this.context = context;
this.contentDefileList = contentDefileList;
}
public int getCount() {
return contentDefileList.size();
}
public Object getItem(int position) {
return contentDefileList.get(position);
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup p) {
CustomLinearLayout view = null;
if (null == convertView) {
view = new CustomLinearLayout(CheckPackageHisActivity.this,
contentDefileList.get(position), position, false);
} else {
view = (CustomLinearLayout) convertView;
view.setDetailInfoLayout(contentDefileList.get(position),
position, isSelectedItems[position]);
}
return view;
}
}
/**
* 其实就是一个view组合体 自定义layout
*
* @author
*
*/
public class CustomLinearLayout extends LinearLayout {
private LinearLayout layout;
private RelativeLayout contentTitleLayout;
private LinearLayout contentDetailLayout;
private ImageView statusImgView;
private TextView his_companynamenumber;
private TextView his_checkpackagetime;
private TextView detailinfotxt;
/**
* @param context
* @param contextDefailMap
* @param position
* @param isCurrentItem
*/
public CustomLinearLayout(Context context,
final Map<String, Object> contextDefailMap, final int position,
boolean isCurrentItem) {
super(context);
layout = (LinearLayout) mLayoutInflater.inflate(
R.layout.checkpackagehisinfo_layout, null);
contentTitleLayout = (RelativeLayout) layout
.findViewById(R.id.titlelayout);
contentTitleLayout.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
his_companynamenumber.setTextColor(Color.WHITE);
his_checkpackagetime.setTextColor(Color.WHITE);
v.setBackgroundColor(Color.parseColor("#0066ff"));
break;
case MotionEvent.ACTION_UP:
his_companynamenumber.setTextColor(Color
.parseColor("#4F4F4F"));
his_checkpackagetime.setTextColor(Color
.parseColor("#4F4F4F"));
v.setBackgroundColor(Color.parseColor("#FFFFFF"));
break;
}
return false;
}
});
// contentTitleLayout
// .setOnLongClickListener(new OnLongClickListener() {
//
// private PopupWindow popupWindow;
// private LayoutInflater inflater;
// private Button confirmBtn;
// private Button cancelBtn;
//
// class onBtnClickListener implements OnClickListener {
//
// @Override
// public void onClick(View v) {
// // TODO Auto-generated method stub
//
// switch (v.getId()) {
//
// case R.id.confirmbtn:
//
//
// break;
// case R.id.cancelbtn:
// popupWindow.dismiss() ;
// break;
// }
// }
// }
//
// @Override
// public boolean onLongClick(final View v) {
//
// inflater = (LayoutInflater)
// CheckPackageHisActivity.this.getSystemService(Context.LAYOUT_INFLATER_SERVICE)
// ;
// View view = inflater.inflate(
// R.layout.popupwindow_layout, null);
// confirmBtn = (Button) view
// .findViewById(R.id.confirmbtn);
// cancelBtn = (Button) view
// .findViewById(R.id.cancelbtn);
// popupWindow = new PopupWindow();
// popupWindow
// .setOnDismissListener(new OnDismissListener() {
//
// @Override
// public void onDismiss() {
//
// v.setBackgroundColor(Color.WHITE);
// }
// });
// popupWindow.setOutsideTouchable(true);
// popupWindow.setWidth(200);
// popupWindow.setHeight(80);
// popupWindow.setContentView(view);
// int location[] = new int[2];
// v.getLocationInWindow(location);
// popupWindow.showAtLocation(v, Gravity.LEFT
// | Gravity.TOP, location[0], location[1]);
// v.setBackgroundColor(Color.parseColor("#48D1CC"));
// return false;
// }
// });
contentDetailLayout = (LinearLayout) layout
.findViewById(R.id.DetailLayout);
his_companynamenumber = (TextView) layout
.findViewById(R.id.his_companynamenumber);
statusImgView = (ImageView) layout.findViewById(R.id.workStatusImg);
his_checkpackagetime = (TextView) layout
.findViewById(R.id.his_checkpackagetime);
his_companynamenumber.setTextColor(Color.parseColor("#4F4F4F"));
his_checkpackagetime.setTextColor(Color.parseColor("#4F4F4F"));
detailinfotxt = (TextView) layout.findViewById(R.id.detailinfotxt);
this.addView(layout);
setDetailInfoLayout(contextDefailMap, position, isCurrentItem);
}
/**
* 显示具体内容 (查询历史)
*
* @param detailInfoMap
* @param position
* @param isCurrentItem
*/
public void setDetailInfoLayout(
final Map<String, Object> detailInfoMap, final int position,
boolean isCurrentItem) {
contentTitleLayout.setBackgroundColor(Color.WHITE);
his_companynamenumber.setText(Common.object2String(detailInfoMap
.get("name"))
+ ":"
+ Common.object2String(detailInfoMap.get("code")));
his_checkpackagetime.setText("上次查询时间:"
+ Common.object2String(detailInfoMap.get("create_time")));
his_companynamenumber.setTextColor(Color.parseColor("#4F4F4F"));
his_checkpackagetime.setTextColor(Color.parseColor("#4F4F4F"));
statusImgView.setImageResource((detailInfoMap.get("status")
.equals("true")) ? R.drawable.mm_submenu_down_normal
: R.drawable.mm_submenu_normal);
if (isCurrentItem) {
String strArr = Common.object2String(detailInfoMap.get("info"))
.replace("-xiangxm-", "\n");
detailinfotxt.setText(strArr);
statusImgView
.setImageResource(R.drawable.mm_submenu_down_normal);
}
contentDetailLayout.setVisibility(isCurrentItem ? VISIBLE : GONE);
}
}
/**
* 修改按钮背景图片
*/
public void changeBtnBackground() {
class MyBtnOnTouch implements OnTouchListener {
int drawable[] = null;
@Override
public boolean onTouch(View v, MotionEvent event) {
drawable = new int[] { R.drawable.back_button_selected,
R.drawable.back_button_normal };
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
v.setBackgroundResource(drawable[0]);
break;
case MotionEvent.ACTION_UP:
v.setBackgroundResource(drawable[1]);
break;
}
return false;
}
}
backBtn.setOnTouchListener(new MyBtnOnTouch());
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// MenuItem item = menu.add(0, SETTINGS_ID, 0, "settings");
// item.setIcon(R.drawable.ic_setting);
// item.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
// return true;
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.activity_main, menu);
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {// 处理点击事件 最下面
switch (item.getItemId()) {
/*
* case R.id.menu_settings: startActivity(new Intent(this,
* SettingActivity.class)); break;
*/
case R.id.menu_delete:
new AlertDialog.Builder(this)
.setTitle("确认删除查询所有历史?")
.setPositiveButton("确认",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog,
int which) {
cls_savehistory.deleteAll(Common.dbh);
adapter.notifyDataSetChanged();
overridePendingTransition(
R.anim.slide_left,
R.anim.slide_right);
}
})
.setNegativeButton("取消",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog,
int which) {
// TODO Auto-generated method stub
}
}).show();
break;
case R.id.back_to_main:
Intent intent = new Intent();
intent.setClass(CheckPackageHisActivity.this, MainActivity.class);
startActivity(intent);
overridePendingTransition(R.anim.slide_left, R.anim.slide_right);
break;
default:
break;
}
return super.onOptionsItemSelected(item);
}
@Override
public void onBackPressed() {
// TODO Auto-generated method stub
super.onBackPressed();
CheckPackageHisActivity.this.finish();
}
public void onScroll(AbsListView v, int i, int j, int k) {
}
public void onScrollStateChanged(AbsListView v, int state) {
if (state == OnScrollListener.SCROLL_STATE_IDLE) {
}
}
}
先就写在这里了,下班回来就倒腾还没吃饭,,,,