ListView
getView()
仅填充从适配器方法可见的那些视图。我想一次加载所有项目。如果我的 listView 在屏幕上显示 1 个项目,getview()
即使我的列表包含 8、9、10... 等项目,也只调用一次
public class TrackAdapter extends BaseAdapter {
public static ArrayList<TrackSection> mlist;
Context mContext;
private LayoutInflater inflater;
private ImageLoader imageLoader;
private DisplayImageOptions options;
String foldername;
ListView mListView;
public static Species species;
public static final String POSITION = "position";
public static final String TYPE = "type";
int h2;
int h1;
int s;
int listPosition;
int viewPosition;
int offset;
private View view;
int previousPosition;
private Display display;
private boolean isFirstTime = true;
ArrayList<Bitmap> bmp;
public TrackAdapter(Context context, ArrayList<TrackSection> list,
Species species, ListView listView) {
TrackAdapter.species = species;
bmp = new ArrayList<Bitmap>();
mContext = context;
mListView = listView;
mlist = list;
inflater = LayoutInflater.from(mContext);
imageLoader = ImageLoader.getInstance();
WindowManager wm = (WindowManager) context
.getSystemService(Context.WINDOW_SERVICE);
display = wm.getDefaultDisplay();
this.foldername = TrackAdapter.species.getCommanName();
// /////////////////Create a option////////////////
options = new DisplayImageOptions.Builder()
.cacheInMemory(true)
.showImageOnLoading(R.drawable.holder)
.showImageOnFail(new ColorDrawable(Color.parseColor("#e6e3d2")))
.imageScaleType(ImageScaleType.EXACTLY_STRETCHED)
.bitmapConfig(Bitmap.Config.RGB_565).build();
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return mlist.size();
}
@Override
public Object getItem(int arg0) {
// TODO Auto-generated method stub
return arg0;
}
@Override
public long getItemId(int arg0) {
// TODO Auto-generated method stub
return arg0;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
Log.e("TrackAdapter", "postion"+position);
view = convertView;
ViewHolder mHolder = null;
if (view == null) {
mHolder = new ViewHolder();
view = inflater.inflate(R.layout.inflate_track_adapter, null);
mHolder.heading = (TextView) view.findViewById(R.id.trackHeading);
mHolder.item = (TextView) view.findViewById(R.id.trackItems);
mHolder.image = (ImageView) view.findViewById(R.id.trackImage);
view.setTag(mHolder);
} else {
mHolder = (ViewHolder) view.getTag();
}
imageLoader.displayImage("assets://image/"
+ mlist.get(position).getMainTrackImage(), mHolder.image,
options);
h2 = mHolder.image.getHeight();
h1 = mListView.getHeight();
mHolder.heading.setText(mlist.get(position).getHeader());
mHolder.heading.setTypeface(((DetailViewActivity) mContext).mFontBold);
mHolder.item.setText(mlist.get(position).getfooter());
mHolder.item.setTypeface(((DetailViewActivity) mContext).mFont);
mHolder.image.setOnClickListener(new View.OnClickListener() {
@SuppressLint("NewApi")
@Override
public void onClick(View arg0) {
// open pageview from here
// mListView.smoothScrollToPosition(position);
// mListView.smoothScrollToPositionFromTop(position, h1 / 2 -
// h2/ 2);
int size = ((DetailViewActivity) mContext).mActionBar
.getHeight();
listPosition = mListView.getHeight();
viewPosition = view.getHeight();
if (viewPosition > listPosition) {
listPosition = display.getHeight();
Log.v("Offset", "Greater Positon");
Log.v("Offset", "" + offset + "View positon "
+ viewPosition);
mListView.smoothScrollToPosition(position);
} else {
Log.v("Offset", "normal Positon");
offset = ((listPosition / 2) - (viewPosition / 2));
previousPosition = viewPosition / 2;
Log.v("Offset", "" + offset + "View positon "
+ viewPosition);
mListView.smoothScrollToPositionFromTop(position,
Math.abs(offset));
}
new CountDownTimer(300, 300) {
@Override
public void onTick(long millisUntilFinished) {
}
@Override
public void onFinish() {
Intent intent = new Intent(mContext,
DetailPagerActivity.class);
intent.putExtra(POSITION, position);
intent.putExtra(TYPE, "track");
mContext.startActivity(intent);
((DetailViewActivity) mContext)
.overridePendingTransition(R.anim.fade_in2,
R.anim.fade_out2);
}
}.start();
}
});
return view;
}
private static class ViewHolder {
public TextView heading, item;
public ImageView image;
}
public void SetItemAgain(ArrayList<TrackSection> list) {
mlist = list;
notifyDataSetChanged();
}
@SuppressLint("NewApi")
public void setItemLocation(int position) {
listPosition = mListView.getHeight();
viewPosition = view.getHeight();
if (viewPosition > listPosition) {
listPosition = display.getHeight();
Log.v("Offset", "Greater Positon");
Log.v("Offset", "" + offset + "View positon " + viewPosition);
mListView.smoothScrollToPosition(position);
} else {
Log.v("Offset", "normal Positon");
offset = ((listPosition / 2) - (viewPosition / 2));
previousPosition = viewPosition / 2;
Log.v("Offset", "" + offset + "View positon " + viewPosition);
mListView.smoothScrollToPositionFromTop(position, Math.abs(offset));
}
}
}
R.layout.inflate_track_adapter
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/lite_brown" >
<TextView
android:id="@+id/trackItems"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/trackImage"
android:layout_marginTop="5dp"
android:paddingBottom="5dp"
android:paddingLeft="10dp"
android:paddingRight="10dp"
android:textSize="16sp" />
<TextView
android:id="@+id/trackHeading"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/trackTop_Layout"
android:layout_marginLeft="16dp"
android:paddingBottom="5dp"
android:paddingTop="10dp"
android:textSize="18sp"
android:textStyle="bold" />
<ImageView
android:id="@+id/trackImage"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/trackHeading"
android:layout_marginTop="5dp" />
</RelativeLayout>