前面的一篇文章通过listview的itemclickListener实现了点击listview中的一个item来改变其背景色。。但是大多时候我们需要在getView中做大量的任务。。比如说getView中的item可能要处理一些布局的显隐、radioGroup选择等等。。再者就是前面提到的改变背景色 。。。具体代码:
看看效果图先:
1:item布局
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
style="@style/layout_match_parent"
android:orientation="vertical"
>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="60dp"
>
<LinearLayout
android:id="@+id/before_show"
android:layout_width="match_parent"
android:layout_height="60dp"
android:orientation="horizontal"
android:gravity="center|left"
android:paddingLeft="2dp"
android:background="@drawable/xc_list_item_" >
<TextView
style="@style/layout_wrap_content"
android:text="@string/str_list_lable_xh"
android:textSize="17sp" />
<TextView
android:id="@+id/before_xh_tv"
style="@style/layout_wrap_content"
android:layout_marginRight="30dp"
android:text="1.1"
android:textSize="17sp" />
<TextView
android:id="@+id/before_ms_tv"
style="@style/layout_wrap_content"
android:text="向客户了解操作员的抱怨"
android:textSize="17sp" />
</LinearLayout>
<ImageView
style="@style/layout_wrap_content"
android:src="@drawable/xc_list_item_pop"
android:id="@+id/before_item_pop"
android:visibility="gone"
/>
</FrameLayout>
<LinearLayout
android:id="@+id/before_hide"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="@drawable/xc_list_body"
android:paddingLeft="2dp"
android:visibility="gone" >
<RelativeLayout
style="@style/layout_mh_wv"
android:layout_marginTop="8dp"
android:orientation="horizontal" >
<TextView
android:id="@+id/befor_zt"
style="@style/layout_wrap_content"
android:layout_alignParentLeft="true"
android:text="@string/str_list_lable_zt"
android:textSize="17sp" />
<RadioGroup
android:focusable="false"
android:clickable="true"
android:id="@+id/before_rg"
style="@style/layout_wrap_content"
android:layout_alignBottom="@id/befor_zt"
android:layout_toRightOf="@id/befor_zt"
android:orientation="horizontal" >
<RadioButton
android:id="@+id/before_zc"
style="@style/layout_wrap_content"
android:text="@string/str_list_lable_zt1"
android:textSize="12sp" />
<RadioButton
android:id="@+id/before_jc"
style="@style/layout_wrap_content"
android:text="@string/str_list_lable_zt2"
android:textSize="12sp" />
<RadioButton
android:id="@+id/before_wh"
style="@style/layout_wrap_content"
android:text="@string/str_list_lable_zt3"
android:textSize="12sp" />
<RadioButton
android:id="@+id/before_wcq"
style="@style/layout_wrap_content"
android:text="@string/str_list_lable_zt4"
android:textSize="12sp" />
</RadioGroup>
</RelativeLayout>
<LinearLayout
style="@style/layout_mh_wv"
android:layout_marginTop="8dp"
android:orientation="horizontal" >
<TextView
style="@style/layout_wrap_content"
android:text="@string/str_list_lable_bz"
android:textSize="17sp" />
<EditText
android:id="@+id/before_edit"
style="@style/layout_mh_wv"
android:textColor="@android:color/white"
android:gravity="top"
android:minLines="3"
/>
</LinearLayout>
<LinearLayout
style="@style/layout_mh_wv"
android:layout_marginTop="8dp" >
<TextView
style="@style/layout_wrap_content"
android:text="@string/str_list_lable_zp"
android:textSize="17sp" />
<ImageView
android:focusable="false"
android:clickable="true"
style="@style/layout_weight_horizontal_weitht"
android:layout_weight="1.0"
android:scaleType="center"
android:id="@+id/before_img1"
android:src="@drawable/xc_list_pic" />
<ImageView
android:focusable="false"
android:clickable="true"
style="@style/layout_weight_horizontal_weitht"
android:layout_weight="1.0"
android:scaleType="center"
android:id="@+id/before_img2"
android:src="@drawable/xc_list_pic" />
<ImageView
android:focusable="false"
android:clickable="true"
style="@style/layout_weight_horizontal_weitht"
android:layout_weight="1.0"
android:scaleType="center"
android:id="@+id/before_img3"
android:src="@drawable/xc_list_pic" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
2:自定义adapter实现
public class CopyOfBeforeAdapter extends BaseAdapter {
CheckPreparedActivity context; //activity
ArrayList<YYWJJ_entity> yyBeforeLists; //item对应的entity
LayoutInflater inflater;
Resources resources;
SharedPreferences sp;
Sp2Json sp2Json;
HashMap<Integer, String> hashMap = new HashMap<Integer, String>();
private String imgDir;
File myFileDir;// 创建文件夹
/**
* @param context
*
*/
public CopyOfBeforeAdapter(Context context) {
this.context = (CheckPreparedActivity) context;
inflater = LayoutInflater.from(context);
resources = context.getResources();
imgDir = Environment.getExternalStorageDirectory() + "/XCTASK1-6";
yyBeforeLists = new ArrayList<YYWJJ_entity>();
sp = context.getSharedPreferences(XcApplication.getApplication()
.getSpName(), context.MODE_PRIVATE);
sp2Json = new Sp2Json(context);
setData();
}
// 获取listview所需要的entity放入到一个arraylist中
public void setData() {
try {
ArrayList<YYWJJ_entity> datas = DataManager.getDataManager()
.getYywjjLists();
for (int j = 0; j < datas.size(); j++) {
if (sp.getString(datas.get(j).getjXh() + "xh", "").equals(
datas.get(j).getjXh())) {
datas.get(j).setjBz(
sp.getString(datas.get(j).getjXh() + "bz", ""));
datas.get(j).setjZt(
sp.getString(datas.get(j).getjXh() + "zt", ""));
}
}
yyBeforeLists.addAll(datas);
} catch (Exception e) {
}
}
@Override
public int getCount() {
if (yyBeforeLists == null) {
return 0;
}
Log.i("msg", "getCount");
return yyBeforeLists.size();
}
@Override
public Object getItem(int position) {
if (yyBeforeLists == null) {
return null;
}
Log.i("msg", position+ "getItem");
return yyBeforeLists.get(position);
}
@Override
public long getItemId(int arg0) {
return arg0;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
TextView xhTextView = null;
TextView msTextView = null;
RadioGroup ztGroup = null;
EditText bzEditText = null;
LinearLayout showLayout = null;
LinearLayout hideLayout = null;
ImageView image1 = null;
ImageView image2 = null;
ImageView image3 = null;
RadioButton radioButton1 = null;
RadioButton radioButton2 = null;
RadioButton radioButton3 = null;
RadioButton radioButton4 = null;
ImageView popImageView = null;
convertView = inflater.inflate(R.layout.xc_tb_check_item, null);
xhTextView = (TextView) convertView.findViewById(R.id.before_xh_tv);
msTextView = (TextView) convertView.findViewById(R.id.before_ms_tv);
ztGroup = (RadioGroup) convertView.findViewById(R.id.before_rg);
bzEditText = (EditText) convertView.findViewById(R.id.before_edit);
showLayout = (LinearLayout) convertView.findViewById(R.id.before_show);
hideLayout = (LinearLayout) convertView.findViewById(R.id.before_hide);
image1 = (ImageView) convertView.findViewById(R.id.before_img1);
image2 = (ImageView) convertView.findViewById(R.id.before_img2);
image3 = (ImageView) convertView.findViewById(R.id.before_img3);
radioButton1 = (RadioButton) convertView.findViewById(R.id.before_zc);
radioButton2 = (RadioButton) convertView.findViewById(R.id.before_jc);
radioButton3 = (RadioButton) convertView.findViewById(R.id.before_wh);
radioButton4 = (RadioButton) convertView.findViewById(R.id.before_wcq);
popImageView = (ImageView) convertView.findViewById(R.id.before_item_pop);
//entity有属性isExpand用来标示显隐
hideLayout
.setVisibility(yyBeforeLists.get(position).isExpand() ? 0 : 8);
final LinearLayout finalLayout = showLayout;
//点击来更新对应position上entity的isExpand值,然后通过notifyDataSetChanged来刷新listview
finalLayout.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Log.i("tag", "click");
yyBeforeLists.get(position).setExpand(
!yyBeforeLists.get(position).isExpand());
notifyDataSetChanged();
}
});
if(yyBeforeLists.get(position).isExpand()){
finalLayout.setBackgroundResource(R.drawable.xc_list_item_s);
}else {
finalLayout.setBackgroundResource(R.drawable.xc_list_item_);
}
//通过对应position上enttity的状态属性来显隐左上角的勾
if(yyBeforeLists.get(position).getjZt().equals("") || yyBeforeLists.get(position).getjZt().equals("0")){
popImageView.setVisibility(View.GONE);
}else {
popImageView.setVisibility(View.VISIBLE);
}
Log.i("msg", "zt "+position+":"+yyBeforeLists.get(position).getjZt());
xhTextView.setText(yyBeforeLists.get(position).getjXh());
String type = yyBeforeLists.get(position).getjType();
if (type.equals("0")) {
msTextView.setText(yyBeforeLists.get(position).getjMs());
} else {
msTextView.setText(resources
.getText(R.string.check_before_str_default));
}
if (yyBeforeLists.get(position).getjBz() != null) {
bzEditText.setText(yyBeforeLists.get(position).getjBz());
}
sp2Json.saveData((yyBeforeLists.get(position).getjXh()) + "xh",
yyBeforeLists.get(position).getjXh());
ztGroup.setId(position);
ztGroup.setOnCheckedChangeListener(null);
if (yyBeforeLists.get(position).getjZt().equals("1")) {
ztGroup.check(R.id.before_zc);
} else if (yyBeforeLists.get(position).getjZt().equals("2")) {
ztGroup.check(R.id.before_jc);
} else if (yyBeforeLists.get(position).getjZt().equals("3")) {
ztGroup.check(R.id.before_wh);
} else if (yyBeforeLists.get(position).getjZt().equals("4")) {
ztGroup.check(R.id.before_wcq);
} else {
ztGroup.clearCheck();
}
Log.i("msg", position+ "getView");
ztGroup.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
try {
switch (checkedId) {
case R.id.before_zc:
sp2Json.saveData(yyBeforeLists.get(position).getjXh()
+ "zt", "1");
//更新对应position上enttity的状态属性来显隐左上角的勾
yyBeforeLists.get(position).setjZt("1");
break;
case R.id.before_jc:
sp2Json.saveData(yyBeforeLists.get(position).getjXh()
+ "zt", "2");
yyBeforeLists.get(position).setjZt("2");
break;
case R.id.before_wh:
sp2Json.saveData(yyBeforeLists.get(position).getjXh()
+ "zt", "3");
yyBeforeLists.get(position).setjZt("3");
break;
case R.id.before_wcq:
sp2Json.saveData(yyBeforeLists.get(position).getjXh()
+ "zt", "4");
yyBeforeLists.get(position).setjZt("4");
break;
default:
break;
}
} catch (Exception e) {
}
}
});
bzEditText.requestFocus();
bzEditText.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before,
int count) {
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
}
@Override
public void afterTextChanged(Editable s) {
try {
String txt = s.toString();
sp2Json.saveData(yyBeforeLists.get(position).getjXh()
+ "bz", txt);
hashMap.put(position, s.toString());
} catch (Exception e) {
// TODO: handle exception
}
}
});
if (hashMap.get(position) != null) {
bzEditText.setText(hashMap.get(position));
}
image1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (checkStrogeState()) {
if (getPositionDrawable(1, position, context) != null) {
final ImageDialog dialog = new ImageDialog(context);
dialog.setImageView(getPositionDrawable(1, position,
context));
dialog.setDialogLayoutParamtrs();
if (sp.getString("isComplete", "0").equals("1")) {
dialog.getRightButton().setEnabled(false);
}
dialog.setImageListener(new ImageListener() {
@Override
public void onButtonClick(int id) {
switch (id) {
case ImageDialog.POSITIVE: {
context.setPicInfo(position
+ "-"
+ yyBeforeLists.get(position)
.getjXh() + "-" + 1);
startForPicture();
dialog.dismiss();
}
break;
case ImageDialog.NEGATIVE:
dialog.dismiss();
break;
default:
break;
}
}
});
dialog.show();
} else {
context.setPicInfo(position + "-"
+ yyBeforeLists.get(position).getjXh() + "-"
+ 1);
startForPicture();
}
} else {
Toast.makeText(context, "请先插入SD卡", Toast.LENGTH_SHORT)
.show();
}
}
});
image2.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (checkStrogeState()) {
if (getPositionDrawable(2, position, context) != null) {
final ImageDialog dialog = new ImageDialog(context);
dialog.setImageView(getPositionDrawable(2, position,
context));
dialog.setDialogLayoutParamtrs();
if (sp.getString("isComplete", "0").equals("0")) {
dialog.getRightButton().setEnabled(false);
}
dialog.setImageListener(new ImageListener() {
@Override
public void onButtonClick(int id) {
switch (id) {
case ImageDialog.POSITIVE: {
context.setPicInfo(position
+ "-"
+ yyBeforeLists.get(position)
.getjXh() + "-" + 2);
startForPicture();
}
break;
case ImageDialog.NEGATIVE:
dialog.dismiss();
break;
default:
break;
}
}
});
dialog.show();
} else {
context.setPicInfo(position + "-"
+ yyBeforeLists.get(position).getjXh() + "-"
+ 2);
startForPicture();
}
} else {
Toast.makeText(context, "请先插入SD卡", Toast.LENGTH_SHORT)
.show();
}
}
});
image3.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (checkStrogeState()) {
if (getPositionDrawable(3, position, context) != null) {
final ImageDialog dialog = new ImageDialog(context);
dialog.setImageView(getPositionDrawable(3, position,
context));
dialog.setDialogLayoutParamtrs();
if (sp.getString("isComplete", "0").equals("0")) {
dialog.getRightButton().setEnabled(false);
}
dialog.setImageListener(new ImageListener() {
@Override
public void onButtonClick(int id) {
switch (id) {
case ImageDialog.POSITIVE: {
context.setPicInfo(position
+ "-"
+ yyBeforeLists.get(position)
.getjXh() + "-" + 3);
startForPicture();
}
break;
case ImageDialog.NEGATIVE:
dialog.dismiss();
break;
default:
break;
}
}
});
dialog.show();
} else {
context.setPicInfo(position + "-"
+ yyBeforeLists.get(position).getjXh() + "-"
+ 3);
startForPicture();
}
} else {
Toast.makeText(context, "请先插入SD卡", Toast.LENGTH_SHORT)
.show();
}
}
});
if (!imgDir.equals("")) {
File imgFile = new File(imgDir);
if (imgFile.exists()) {
for (File file : imgFile.listFiles()) {
String imgName = file.getName();
if (imgName.contains(yyBeforeLists.get(position).getjXh()
+ "#" + 1)) {
Bitmap mapBitmap = BitmapFactory.decodeFile(file
.getPath());
BitmapDrawable drawable = new BitmapDrawable(mapBitmap);
image1.setImageDrawable(drawable);
} else if (imgName.contains(yyBeforeLists.get(position)
.getjXh() + "#" + 2)) {
Bitmap mapBitmap = BitmapFactory.decodeFile(file
.getPath());
BitmapDrawable drawable = new BitmapDrawable(mapBitmap);
image2.setImageDrawable(drawable);
} else if (imgName.contains(yyBeforeLists.get(position)
.getjXh() + "#" + 3)) {
Bitmap mapBitmap = BitmapFactory.decodeFile(file
.getPath());
BitmapDrawable drawable = new BitmapDrawable(mapBitmap);
image3.setImageDrawable(drawable);
}
}
}
}
return convertView;
}
private BitmapDrawable getPositionDrawable(int tag, int position,
Context context) {
BitmapDrawable drawable = null;
if (!imgDir.equals("")) {
File imgFile = new File(imgDir);
if (imgFile.exists()) {
for (File file : imgFile.listFiles()) {
String imgName = file.getName();
if (imgName.contains(yyBeforeLists.get(position).getjXh()
+ "#" + tag)) {
Bitmap mapBitmap = BitmapFactory.decodeFile(file
.getPath());
drawable = new BitmapDrawable(context.getResources(),
mapBitmap);
}
}
}
}
return drawable;
}
class ViewHolder {
private TextView xhTextView;
private TextView msTextView;
private RadioGroup ztGroup;
private EditText bzEditText;
private LinearLayout showLayout;
private LinearLayout hideLayout;
private ImageView image1;
private ImageView image2;
private ImageView image3;
RadioButton radioButton1;
RadioButton radioButton2;
RadioButton radioButton3;
RadioButton radioButton4;
}
/**
* sd卡的bound状态
*
* @return
*/
private boolean checkStrogeState() {
boolean state = true;
if (Environment.getExternalStorageState().equals(
Environment.MEDIA_MOUNTED)) {
state = true;
} else {
state = false;
}
return state;
}
/**
* 拍照
*
* @param serNum
*/
private void startForPicture() {
Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
context.startActivityForResult(intent, 1);
}
}
效果图:
说明:当点击整个item的时候隐藏的布局会显隐【显示则隐藏、隐藏则显示】 ,当checkbox有状态被选择的时候,item左上角的勾会显示
最后加个entity的构造。。
YYWJJ_entity entiry1 = new YYWJJ_entity();
entiry1.setCmdid(cmdid);
entiry1.setjType("0");
entiry1.setjXh("1.1");
entiry1.setjZt("0");
entiry1.setExpand(false);
ok。。。