[英]How can I add images from the gallery to my gridview dynamically ? I can go to the gallery but images aren't getting added to my gridview
[英]How can I dynamically add images to a GridView?
我有一个基于项目数组创建的GridView
。 当网格滚动到底部时,我需要添加更多图像,但我不知道该怎么做。
现在我明白了以下几点:
ImageViews
的类 这是我的代码:
package com.wm.grid;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.AbsListView;
import android.widget.AbsListView.OnScrollListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ListAdapter;
import android.widget.Toast;
public class GridActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final Integer[] mThumbIds12 = {
R.drawable.sample_2, R.drawable.sample_3,R.drawable.s1,
R.drawable.sample_4, R.drawable.sample_5,
R.drawable.sample_6, R.drawable.sample_7,
R.drawable.sample_0, R.drawable.sample_1,
R.drawable.sample_2, R.drawable.sample_3,
R.drawable.sample_4, R.drawable.sample_5,
R.drawable.sample_6, R.drawable.sample_7,
R.drawable.sample_0, R.drawable.sample_1,
R.drawable.sample_2, R.drawable.sample_3,
R.drawable.sample_4, R.drawable.sample_5,
R.drawable.sample_6, R.drawable.sample_7
};
final Integer[] mThumbIds1 = {
R.drawable.sample_2, R.drawable.sample_3,R.drawable.s1,
R.drawable.sample_2, R.drawable.sample_3,R.drawable.s1,
R.drawable.sample_2, R.drawable.sample_3,R.drawable.s1,
R.drawable.sample_2, R.drawable.sample_3,R.drawable.s1,
};
final GridView gridview = (GridView) findViewById(R.id.gridview);
gridview.setAdapter(new ImageAdapter(this,mThumbIds12));
gridview.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
Toast.makeText(GridActivity.this, "" + position, Toast.LENGTH_SHORT).show();
}
});
gridview.setOnScrollListener(new OnScrollListener() {
public void onScrollStateChanged(AbsListView view, int scrollState) {
switch (scrollState) {
case OnScrollListener.SCROLL_STATE_IDLE:
//List is idle
break;
case OnScrollListener.SCROLL_STATE_TOUCH_SCROLL:
//Toast.makeText(GridActivity.this, "X", Toast.LENGTH_SHORT).show();
break;
case OnScrollListener.SCROLL_STATE_FLING:
//Toast.makeText(GridActivity.this, "Z", Toast.LENGTH_SHORT).show();
break;
}
}
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
if(firstVisibleItem + visibleItemCount == totalItemCount){
Toast.makeText(GridActivity.this, "BOTTOM", Toast.LENGTH_SHORT).show();
}
//Toast.makeText(GridActivity.this, "TOP", Toast.LENGTH_SHORT).show();
}
});
}
}
现在有一些冗余代码,但这是我的测试项目。 我所知道的是,当firstVisibleItem + visibleItemCount == totalItemCount
(即当GridView
到达底部时),必须更新适配器。
这是我的ImageAdapter
(基于Android开发网站)
package com.wm.grid;
import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageView;
import com.wm.grid.R;
public class ImageAdapter extends BaseAdapter {
private Context mContext;
private Integer[] mThumbIds;
public ImageAdapter(Context c,Integer[] m) {
mContext = c;
mThumbIds = m;
}
public int getCount() {
return mThumbIds.length;
}
public Object getItem(int position) {
return null;
}
public long getItemId(int position) {
return 0;
}
// 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) { // if it's not recycled, initialize some attributes
imageView = new ImageView(mContext);
imageView.setLayoutParams(new GridView.LayoutParams(150, 150));
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
imageView.setPadding(8, 8, 8, 8);
} else {
imageView = (ImageView) convertView;
}
imageView.setImageResource(mThumbIds[position]);
return imageView;
}
public Integer[] AddItems(Integer[] a){
final Integer[] aThumbIds;
final int i;
aThumbIds = a;
Integer[] a2 = new Integer[mThumbIds.length + aThumbIds.length];
System.arraycopy(mThumbIds, 0, a2, 0, mThumbIds.length);
System.arraycopy(aThumbIds, 0, a2, mThumbIds.length, aThumbIds.length);
return mThumbIds;
}
}
image.xml
<ImageView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/grid_item_image"
android:layout_width="50dp"
android:layout_height="50dp"
android:src="@drawable/s1"
>
</ImageView>
main.xml中
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/layout1"
>
<LinearLayout
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1">
<TextView
android:id="@+id/tv1"
android:layout_width="fill_parent"
android:layout_height="40pt"
android:text="row three"
android:textSize="15pt" />
</LinearLayout>
<LinearLayout
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1">
<GridView
android:id="@+id/gridview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:columnWidth="150dp"
android:numColumns="auto_fit"
android:verticalSpacing="2dp"
android:horizontalSpacing="2dp"
android:stretchMode="columnWidth"
android:gravity="center"
/>
</LinearLayout>
</LinearLayout>
我该怎么做呢?
您可以通过.getAdapter()获取对支持GridView的适配器的引用。 当用户向下滚动时,获取此适配器,添加新图像(我认为您应该使用ArrayList而不是简单数组,以便您可以在ImageAdapter类中轻松追加更多数据),并在现在修改的适配器上调用.notifyDatasetChanged() ,所以它将加载新数据。
您应该能够在gridview上调用getAdapter。 或者 - 它可能不是最佳实践 - 但您可以使适配器保持静态,这样您就可以从Grid活动中进行访问。 然后,您可以动态地将图像添加到适配器并重置您的布局。
试试看。 这就是我要做的。 如果您找到更好的方式让我知道!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.