解决方案 »
- android kernel 黑屏
- 关于数组越界问题的疑惑
- 说说大家想手机为你做什么
- android surfaceview界面卡死
- 为什么同一布局代码在不同的工程中会出现不同的效果???
- android + html5 + css css显示无效
- android web service遇到HttpTransportSE.call Source not found.
- android 组合控件的设置
- android客户端向服务器发送图片和文字,类似于发微博。能用json格式发送吗?
- imsi号是什么,通常是几位?
- Fragment嵌套使用的一些问题
- android工程中只能存在一个R.java吗?
而是错乱的。请问这个问题,是我的BaseAdapter类写错了嘛?
完整的BaseAdapter 如下:
package com.team.adapter;import
...public class CardAdapter extends BaseAdapter {
private ArrayList<HashMap<String, Object>> testData;
private LayoutInflater inflater;// 这个一定要懂它的用法及作用
private Context mContext;
// 构造函数:要理解(这里构造方法的意义非常强大,你也可以传一个数据集合的参数,可以根据需要来传参数)
public CardAdapter(Context context, ArrayList<HashMap<String, Object>> testData) {
this.mContext = context;
this.inflater = LayoutInflater.from(context);
this.testData = testData;
} // 这里的getCount方法是程序在加载显示到ui上时就要先读取的,这里获得的值决定了listview显示多少行
@Override
public int getCount() {
// 在实际应用中,此处的返回值是由从数据库中查询出来的数据的总条数
return testData.size();
} // 根据ListView所在位置返回View
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
//return testData.get(position);
return null;
} // 根据ListView位置得到数据源集合中的Id
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
//return position;
return 0;
} public final class ViewHolder {
// 卡片背景
//public ImageView cardImage;
// 卡片正面
public ImageButton back;
public ImageButton forward;
public ImageView editBtn;
public ImageView cardLogo;
public TextView cardId;
public TextView cardDate;
public TextView cardUser;
public TextView cardPublisher;
public TextView cardSecureCode;
public ImageView cardType;
// 卡片背面
public ImageView cardStrip;
public TextView cardOtherName1;
public TextView cardOtherValue1;
public TextView cardOtherName2;
public TextView cardOtherValue2;
public TextView cardOtherName3;
public TextView cardOtherValue3;
// 布局
public ViewGroup mContainer;
public RelativeLayout frontLayout;
public RelativeLayout backLayout;
//public ExecutorService exectutorService; } // 有很多例子中都用到这个holder,理解下??
ViewHolder holder = null; // 重写adapter最重要的就是重写此方法,此方法也是决定listview界面的样式的
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
//ViewHolder holder = null;
//观察convertView随ListView滚动情况
Log.v("MyListViewBase", "getView " + position + " " + convertView);
// 思考这里为何要判断convertView是否为空 ??
if (convertView == null) {
holder = new ViewHolder(); // 把listview_item layout转换成View【LayoutInflater的作用】
convertView = inflater.inflate(R.layout.card, null);
Log.v("MyListViewBase", "inflater " + convertView);
holder.mContainer = (ViewGroup) convertView
.findViewById(R.id.container);
holder.mContainer.setTag(position);
holder.frontLayout = (RelativeLayout) convertView
.findViewById(R.id.frontLayout);
holder.backLayout = (RelativeLayout) convertView
.findViewById(R.id.backLayout); holder.mContainer.setPersistentDrawingCache(ViewGroup.PERSISTENT_ANIMATION_CACHE);
// 通过上面layout得到的view来获取里面的具体控件
holder.back = (ImageButton) convertView.findViewById(R.id.back);
holder.forward = (ImageButton) convertView.findViewById(R.id.forward);
holder.editBtn = (ImageView) convertView
.findViewById(R.id.editBtn); holder.cardLogo = (ImageView) convertView
.findViewById(R.id.cardLogo);
holder.cardId = (TextView) convertView.findViewById(R.id.cardId);
holder.cardDate = (TextView) convertView
.findViewById(R.id.cardDate);
holder.cardUser = (TextView) convertView
.findViewById(R.id.cardUser);
holder.cardPublisher = (TextView) convertView
.findViewById(R.id.cardPublisher);
holder.cardSecureCode = (TextView) convertView
.findViewById(R.id.cardSecureCode);
holder.cardType = (ImageView) convertView
.findViewById(R.id.cardType); holder.cardStrip = (ImageView) convertView
.findViewById(R.id.cardStrip);
holder.cardOtherName1 = (TextView) convertView
.findViewById(R.id.cardOtherName1);
holder.cardOtherValue1 = (TextView) convertView
.findViewById(R.id.cardOtherValue1);
holder.cardOtherName2 = (TextView) convertView
.findViewById(R.id.cardOtherName2);
holder.cardOtherValue2 = (TextView) convertView
.findViewById(R.id.cardOtherValue2);
holder.cardOtherName3 = (TextView) convertView
.findViewById(R.id.cardOtherName3);
holder.cardOtherValue3 = (TextView) convertView
.findViewById(R.id.cardOtherValue3);
//animate(holder.mContainer).setDuration(1000);
//绑定ViewHolder对象
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
// 这里testData.get(position).get("cardImage")),其实就是从list集合(testData)中取出对应索引的map,然后再根据键值对取值
holder.editBtn.setBackgroundResource((Integer) testData.get(position)
.get("editBtn"));
holder.cardLogo.setBackgroundResource((Integer) testData.get(position)
.get("cardLogo"));
holder.cardId.setText((String) testData.get(position).get("cardId"));
holder.cardDate
.setText((String) testData.get(position).get("cardDate"));
holder.cardUser
.setText((String) testData.get(position).get("cardUser"));
holder.cardPublisher.setText((String) testData.get(position).get(
"cardPublisher"));
holder.cardSecureCode.setText((String) testData.get(position).get(
"cardSecureCode"));
holder.cardStrip.setBackgroundResource((Integer) testData.get(position)
.get("cardStrip")); holder.cardType.setBackgroundResource((Integer) testData.get(position)
.get("cardType")); /*holder.frontLayout.setBackgroundResource((Integer) testData.get(position)
.get("cardImage"));
holder.backLayout.setBackgroundResource((Integer) testData.get(position)
.get("cardImage"));*/
holder.mContainer.setBackgroundResource((Integer) testData.get(position)
.get("cardImage"));
String cardOtherName1s = (String) testData.get(position).get(
"cardOtherName1");
String cardOtherValue1s = (String) testData.get(position).get(
"cardOtherValue1");
String cardOtherName2s = (String) testData.get(position).get(
"cardOtherName2");
String cardOtherValue2s = (String) testData.get(position).get(
"cardOtherValue2");
String cardOtherName3s = (String) testData.get(position).get(
"cardOtherName3");
String cardOtherValue3s = (String) testData.get(position).get(
"cardOtherValue3"); holder.back.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//applyRotation(0,90,R.id.backLayout);
animate(holder.mContainer).rotationYBy(180);
Log.v("MyListViewBase", "你点击了按钮back" + position);//打印Button的点击信息
Toast.makeText(mContext, "单击back"+position, Toast.LENGTH_SHORT).show();
}
});
// 为forward添加click监听
holder.forward.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//applyRotation(-1,180,R.id.frontLayout);
animate(holder.mContainer).rotationYBy(180);
Log.v("MyListViewBase", "你点击了按钮forward" + position);//打印Button的点击信息
Toast.makeText(mContext, "单击forward"+position, Toast.LENGTH_SHORT).show();
}
});
return convertView;
} private void applyRotation(float start, float end, final int viewId) {
final float centerX = holder.mContainer.getWidth() / 2.0f;
final float centerY = holder.mContainer.getHeight() / 2.0f;
Rotate3d rotation = new Rotate3d(start, end, centerX, centerY, 200.0f,
true);
rotation.setDuration(500);
rotation.setInterpolator(new AccelerateInterpolator());
rotation.setAnimationListener(new AnimationListener() {
@Override
public void onAnimationEnd(Animation arg0) { holder.mContainer.post(new Runnable() {
@Override
public void run() {
if (viewId == R.id.frontLayout) {
System.out.println("sdfsdfsd1");
holder.frontLayout.setVisibility(View.GONE);
holder.backLayout.setVisibility(View.VISIBLE);
holder.backLayout.setFocusable(true);
} else if (viewId == R.id.backLayout) {
System.out.println("sdfsdfsd2");
holder.backLayout.setVisibility(View.GONE);
holder.frontLayout.setVisibility(View.VISIBLE);
holder.frontLayout.setFocusable(true);
}
Rotate3d rotatiomAnimation = new Rotate3d(-90, 0,
centerX, centerY, 200.0f, false);
rotatiomAnimation.setDuration(500);
rotatiomAnimation
.setInterpolator(new DecelerateInterpolator()); holder.mContainer.startAnimation(rotatiomAnimation);
}
}); } @Override
public void onAnimationRepeat(Animation arg0) {
} @Override
public void onAnimationStart(Animation arg0) {
}
});
holder.mContainer.startAnimation(rotation);
}
}