IndexableGridView.java的GridView與字母索引和按字母順序的GroupWise在機器人
public class IndexableGridView extends GridView {
private boolean mIsFastScrollEnabled = false;
private IndexGridScroller mScroller = null;
private GestureDetector mGestureDetector = null;
public IndexableGridView(Context context) {
super(context);
}
public IndexableGridView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public IndexableGridView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
public boolean isFastScrollEnabled() {
return mIsFastScrollEnabled;
}
@Override
public void setFastScrollEnabled(boolean enabled) {
mIsFastScrollEnabled = enabled;
if (mIsFastScrollEnabled) {
if (mScroller == null)
mScroller = new IndexGridScroller(getContext(), this);
} else {
if (mScroller != null) {
mScroller.hide();
mScroller = null;
}
}
}
@Override
public void draw(Canvas canvas) {
super.draw(canvas);
// Overlay index bar
if (mScroller != null)
mScroller.draw(canvas);
}
@Override
public boolean onTouchEvent(MotionEvent ev) {
// Intercept ListView's touch event
if (mScroller != null && mScroller.onTouchEvent(ev))
return true;
if (mGestureDetector == null) {
mGestureDetector = new GestureDetector(getContext(), new GestureDetector.SimpleOnGestureListener() {
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2,
float velocityX, float velocityY) {
// If fling happens, index bar shows
if (mScroller != null)
mScroller.show();
return super.onFling(e1, e2, velocityX, velocityY);
}
});
}
mGestureDetector.onTouchEvent(ev);
return super.onTouchEvent(ev);
}
@Override
public void setAdapter(ListAdapter adapter) {
super.setAdapter(adapter);
if (mScroller != null)
mScroller.setAdapter(adapter);
}
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
if (mScroller != null)
mScroller.onSizeChanged(w, h, oldw, oldh);
}
}
ImageAdapter.java
public class ImageAdapter extends BaseAdapter implements SectionIndexer{
private String mSections = "#ABCDEFGHIJKLMNOPQRSTUVWXYZ";
private Context mContext;
List<String> mItems;
// Constructor
public ImageAdapter(Context c, List<String> mItems) {
mContext = c;
this.mItems = mItems;
}
public int getCount() {
return mItems.size();
}
public Object getItem(int position) {
return mItems.get(position);
}
public long getItemId(int position) {
return mItems.indexOf(getItem(position));
}
// create a new ImageView for each item referenced by the Adapter
public View getView(int position, View convertView, ViewGroup parent) {
ImageView imageView;
if (convertView == null) {
imageView = new ImageView(mContext);
imageView.setLayoutParams(new GridView.LayoutParams(85, 85));
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
imageView.setPadding(8, 8, 8, 8);
} else {
imageView = (ImageView) convertView;
}
imageView.setImageBitmap(getBitmapFromAsset("imgs", mItems.get(position)));
return imageView;
}
@Override
public Object[] getSections() {
// TODO Auto-generated method stub
String[] sections = new String[mSections.length()];
for (int i = 0; i < mSections.length(); i++)
sections[i] = String.valueOf(mSections.charAt(i));
return sections;
}
@Override
public int getPositionForSection(int sectionIndex) {
// TODO Auto-generated method stub
return 0;
}
@Override
public int getSectionForPosition(int position) {
// TODO Auto-generated method stub
for (int i = position; i >= 0; i--) {
for (int j = 0; j < getCount(); j++) {
if (i == 0) {
// For numeric section
for (int k = 0; k <= 9; k++) {
if (StringMatcher.match(String.valueOf(((String) getItem(j)).charAt(0)), String.valueOf(k)))
return j;
}
} else {
if (StringMatcher.match(String.valueOf(((String) getItem(j)).charAt(0)), String.valueOf(mSections.charAt(i))))
return j;
}
}
}
return 0;
}
}
private Bitmap getBitmapFromAsset(String folder, String strName)
{
AssetManager assetManager = getResources().getAssets();
InputStream istr = null;
Bitmap bitmap = null;
try {
istr = assetManager.open(folder+"/"+strName);
bitmap = BitmapFactory.decodeStream(istr);
istr.close();
} catch (IOException e) {
e.printStackTrace();
}
return bitmap;
}
我上面的代碼用於在gridview的字母索引器。這與this link相同。 我只是改變列表視圖到gridview ..現在我的問題是它不顯示我alphaindexer在右側。
列表視圖索引例如:
我想像下面的圖像顯示數據:
您是否在'IndexableGridView'上調用了'setFastScrollEnabled(true)'? –
@MikeM。是的,我試過了,但我也想按字母順序顯示數據.. – Riser
@MikeM。我爲此添加了圖像。 – Riser