下面是核心代码:
public class Submit_WallpaperUploadFragment extends BaseFragment { private GridViewAdapter adapter; @ViewInject(R.id.gridview) private GridView mGridView; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.submit_kisekae_wallpaper_selector, container, false); ViewUtils.inject(this, rootView); return rootView; } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); adapter = new GridViewAdapter(getActivity(), null, CursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER); mGridView.setAdapter(adapter); getLoaderManager().initLoader(0, null, myLoader); } private LoaderManager.LoaderCallbacks<Cursor> myLoader = new LoaderManager.LoaderCallbacks<Cursor>() { @Override public void onLoaderReset(Loader<Cursor> loader) { adapter.swapCursor(null); } @Override public void onLoadFinished(Loader<Cursor> loader, Cursor data) { if (data != null) { adapter.swapCursor(data); ProgressDialogUtils.dismiss(); } } @Override public Loader<Cursor> onCreateLoader(int id, Bundle args) { if (id == 0) { ProgressDialogUtils.show(getActivity()); String[] projection = {MediaStore.Images.ImageColumns._ID, MediaStore.Images.ImageColumns.DATA}; // TODO 加入SD是否mounted判断 Uri uri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI; String sortOrder = MediaStore.Images.ImageColumns.DATE_TAKEN + " DESC"; return new CursorLoader(getActivity(), uri, projection, null, null, sortOrder); } return null; } }; private class GridViewAdapter extends CursorAdapter { public GridViewAdapter(Context context, Cursor c, int flags) { super(context, c, flags); } @Override public View newView(Context context, Cursor cursor, ViewGroup parent) { ViewHolder viewHolder; View convertView = LayoutInflater.from(context).inflate(R.layout.submit_kisekae_wallpaper_selector_item, parent, false); viewHolder = new ViewHolder(); ViewUtils.inject(viewHolder, convertView); convertView.setTag(viewHolder); int numColumns = FieldUtils.getGridViewFieldValue(mGridView, "mNumColumns"); // TODO 加入sdk-int判断 if (numColumns > 1) { ViewGroup.LayoutParams layoutParams = convertView.getLayoutParams(); int horizontalSpacing = FieldUtils.getGridViewFieldValue(mGridView, "mHorizontalSpacing"); int left = mGridView.getPaddingLeft(); int right = mGridView.getPaddingRight(); int plusWidth = left + right + horizontalSpacing * (numColumns - 1); int width = (context.getResources().getDisplayMetrics().widthPixels - plusWidth) / numColumns; if (width > 0) layoutParams.width = width; } viewHolder.contentImg.setImageResource(R.drawable.img_loading); return convertView; } @Override public void bindView(View view, Context context, Cursor cursor) { ViewHolder viewHolder = (ViewHolder) view.getTag(); int index = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA); String imgPath = cursor.getString(index); Picasso picasso = Picasso.with(getActivity()); picasso.setLoggingEnabled(false); picasso.load("file://" + imgPath) .placeholder(R.drawable.img_loading) .config(Bitmap.Config.RGB_565) .error(R.drawable.img_loadfail) .fit() .into(viewHolder.contentImg); } } public class ViewHolder { @ViewInject(R.id.imageView) public ImageView contentImg; @ViewInject(R.id.contentSelecter) @SuppressWarnings("unused") public ImageView contentIsSelecter; } }
</pre><pre name="code" class="java">布局文件1:R.layout.submit_kisekae_wallpaper_selector
<pre name="code" class="java"><?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/submit_main_fragment_bg"> <!-- 用户从本地选择壁纸或者图标 --> <GridView android:id="@+id/gridview" android:layout_width="match_parent" android:layout_height="wrap_content" android:numColumns="3" android:horizontalSpacing="12dp" android:verticalSpacing="10dp" android:padding="10dp" android:stretchMode="columnWidth" android:overScrollMode="never" android:scrollbarStyle="outsideOverlay"/> </RelativeLayout>
</pre><pre name="code" class="java">布局文件2:R.layout.submit_kisekae_wallpaper_selector_item
<pre name="code" class="java"><?xml version="1.0" encoding="utf-8"?> <RelativeLayout android:layout_width="match_parent" android:layout_height="187dp" xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:padding="1px" android:background="@drawable/wallpaper_select_border"> <ImageView android:id="@+id/imageView" android:layout_width="match_parent" android:layout_height="match_parent" android:scaleType="centerCrop" android:adjustViewBounds="true" tools:ignore="ContentDescription" /> </LinearLayout> <ImageView android:id="@+id/contentSelecter" android:layout_width="30dp" android:layout_height="30dp" android:src="@drawable/content_select" android:layout_alignParentRight="true" android:visibility="gone" tools:ignore="ContentDescription"/> </RelativeLayout>