在我的項目中,我想加載url圖像並將它們顯示在gridview活動中。但如何將這些圖像加載到gridview適配器?網格/列表視圖的概念如何將圖像發送到imageitem類
,所以我想了解grid/list view
適配器的概念,我的理解。在一個簡單的例子,它包含3個活動:
1 - 主要業務
Useally它包含的定義gridview
佈局,方法GridViewAdapter
(第三個活動)的定義,在網格視圖中設置適配器。以及要在GridViewAdapter
方法中發送的數據或陣列圖像(第二個活動)。
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
gridView = (GridView) findViewById(R.id.gridView);
gridAdapter = new GridViewAdapter(this, R.layout.grid_item_layout, getData());
gridView.setAdapter(gridAdapter);
}
好的我的問題是什麼方式發送圖像在gridview適配器?
在這個example他們用這種方式,但我不需要TypedArray爲我的項目,實際上邊問題,我什麼時候需要使用它?
private ArrayList<ImageItem> getData() {
final ArrayList<ImageItem> imageItems = new ArrayList<>();
TypedArray imgs = getResources().obtainTypedArray(R.array.image_ids);
for (int i = 0; i < imgs.length(); i++) {
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), imgs.getResourceId(i, -1));
imageItems.add(new ImageItem(bitmap, "Image#" + i));
}
return imageItems;
}
在另一個
example
他們使用的資源
mItems = new ArrayList<GridViewItem>();
Resources resources = getResources();
mItems.add(new GridViewItem(resources.getDrawable(R.drawable.aim), getString(R.string.aim)));
:
mItems.add(new GridViewItem(resources.getDrawable(R.drawable.youtube), getString(R.string.youtube)));
在另一個example他們使用的靜態圖像
好吧,我不知道他們是從繪製得到的圖像,但我應該怎麼做在我的活動中顯示它們
- Ill繼續我的解釋ñ櫃面有什麼不對我做
2的ImageItem其另一個活動的地方存儲圖像沒有必要去到它。
3 GridViewAdapter
確定在這裏,我們創建類的構造函數中,我們創建getview方法,進入它之前,我要補充getcount()
方法或getitem()
的convertview被用來獲得舊的觀點,持有人保持我猜想的形象。 現在ImageItem
是空的,因爲我沒有在主要活動中定義它。那麼該怎麼做?
public class GridViewAdapter extends ArrayAdapter {
private Context context;
private int layoutResourceId;
private ArrayList data = new ArrayList();
public GridViewAdapter(Context context, int layoutResourceId, ArrayList data) {
super(context, layoutResourceId, data);
this.layoutResourceId = layoutResourceId;
this.context = context;
this.data = data;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View row = convertView;
ViewHolder holder = null;
if (row == null) {
LayoutInflater inflater = ((Activity) context).getLayoutInflater();
row = inflater.inflate(layoutResourceId, parent, false);
holder = new ViewHolder();
holder.imageTitle = (TextView) row.findViewById(R.id.text);
holder.image = (ImageView) row.findViewById(R.id.image);
row.setTag(holder);
} else {
holder = (ViewHolder) row.getTag();
}
ImageItem item = data.get(position);
holder.imageTitle.setText(item.getTitle());
holder.image.setImageBitmap(item.getImage());
Picasso.
with(mContext).
load(ImageItem .Getimage())
.placeholder(R.drawable.ic_launcher)
.fit()
.into(holder.imageView);
return row;
}
static class ViewHolder {
TextView imageTitle;
ImageView image;
}
}
EDT
//Downloading data asynchronously
public class AsyncHttpTask extends AsyncTask<String, Void, Integer> {
@Override
protected Integer doInBackground(String... params) {
Integer result = 0;
try {
// Create Apache HttpClient
HttpClient httpclient = new DefaultHttpClient();
HttpResponse httpResponse = httpclient.execute(new HttpGet(params[0]));
int statusCode = httpResponse.getStatusLine().getStatusCode();
// 200 represents HTTP OK
if (statusCode == 200) {
String response = streamToString(httpResponse.getEntity().getContent());
parseResult(response);
result = 1; // Successful
} else {
result = 0; //"Failed
}
} catch (Exception e) {
Log.d(TAG, e.getLocalizedMessage());
}
return result;
}
@Override
protected void onPostExecute(Integer result) {
// Download complete. Let us update UI
if (result == 1) {
mGridAdapter.setGridData(mGridImages);
mGridAdapter.notifyDataSetChanged();
} else {
Toast.makeText(MainActivity.this, "No Connection found,Check your Connection!", Toast.LENGTH_SHORT).show();
}
mProgressBar.setVisibility(View.GONE);
}
}
String streamToString(InputStream stream) throws IOException {
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(stream));
String line;
String result = "";
while ((line = bufferedReader.readLine()) != null) {
result += line;
}
// Close stream
if (null != stream) {
stream.close();
}
return result;
}
/**
* Parsing the feed results and get the list
* @param result
*/
private void parseResult(String result) {
try {
JSONObject response = new JSONObject(result);
JSONArray posts = response.optJSONArray("result");
GridImages item;
for (int i = 0; i < posts.length(); i++) {
JSONObject post = posts.optJSONObject(i);
String title = post.optString("name");
String image=post.optString("path");
item = new GridImages();
item.Settitle(title);
item.Setimage(image);
// JSONArray attachments = post.getJSONArray("attachments");
// if (null != attachments && attachments.length() > 0) {
// JSONObject attachment = attachments.getJSONObject(0);
// if (attachment != null)
// item.Setimage(attachment.getString("url"));
//}
mGridImages.add(item);
}
} catch (JSONException e) {
e.printStackTrace();
}
}
不應該在對象中使用位圖硬引用。你似乎對android很陌生。您可以在ImageItem中傳遞圖片網址,以創建圖片網址或ID字段。現在,如果圖像來自本地資源,則不需要畢加索。 – subhash
@subhash以上只是示例,我傳遞的iamge作爲URL,我已經存儲在數據庫中的url,但我的問題,如果你能幫助我如何創建一個方法,從數據庫中獲取URL併發送到畢加索。我創建了這樣的方法,但沒有工作 – Moudiz
所以,這個問題是從sqlite重新獲取url,創建ImageItem對象並將它們作爲數組在適配器中傳遞? – subhash