Android GridView反向
我在GridView中有来自在线数据库的图片,我希望它的顺序相反。 因此,我希望当我向数据库中添加新图片时,它是GridView中的第一张图片 我试图找到一个答案,但在stackoverflow一点也没有 这是我的ListViewAdapter:Android GridView反向,android,gridview,Android,Gridview,我在GridView中有来自在线数据库的图片,我希望它的顺序相反。 因此,我希望当我向数据库中添加新图片时,它是GridView中的第一张图片 我试图找到一个答案,但在stackoverflow一点也没有 这是我的ListViewAdapter: public class GetMovieImagesListViewAdapter extends BaseAdapter { private JSONArray dataArray; private Activity activity; pri
public class GetMovieImagesListViewAdapter extends BaseAdapter {
private JSONArray dataArray;
private Activity activity;
private static final String baseUrlForImage = "http://google.com";
private static LayoutInflater inflater = null;
public GetMovieImagesListViewAdapter(JSONArray jsonArray, Activity a){
this.dataArray = jsonArray;
this.activity = a;
inflater = (LayoutInflater) this.activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public int getCount() {
return this.dataArray.length();
}
@Override
public Object getItem(int position){
return position;
}
@Override
public long getItemId(int position){
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
final ListCell cell;
if (convertView == null) {
convertView = inflater.inflate(R.layout.get_images_from_movies_list_cell, null);
cell = new ListCell();
cell.MovieImages = (ImageView) convertView.findViewById(R.id.movie_images_id);
convertView.setTag(cell);
} else {
cell = (ListCell) convertView.getTag();
}
try {
JSONObject jsonObject = this.dataArray.getJSONObject(position);
String nameOfImage = jsonObject.getString("image");
String urlForImageInServer = baseUrlForImage + nameOfImage;
new AsyncTask<String, Void, Bitmap>(){
@Override
protected Bitmap doInBackground(String... params)
{
String url = params[0];
Bitmap icon = null;
try
{
InputStream in = new URL(url).openStream();
icon = BitmapFactory.decodeStream(in);
} catch (IOException e) {
e.printStackTrace();
}
return icon;
}
@Override
protected void onPostExecute(Bitmap result)
{
cell.MovieImages.setImageBitmap(result);
}
}.execute(urlForImageInServer);
} catch (JSONException e) {
e.printStackTrace();
}
return convertView;
}
private class ListCell{
private ImageView MovieImages;
}}
公共类GetMovieImagesListViewAdapter扩展了BaseAdapter{
私有JSONArray数据阵列;
私人活动;
私有静态最终字符串baseUrlForImage=”http://google.com";
专用静态充气机=空;
公共GetMovieImagesListViewAdapter(JSONArray JSONArray,活动a){
this.dataArray=jsonArray;
本活动=a;
充气器=(LayoutFlater)this.activity.getSystemService(Context.LAYOUT\u充气器\u服务);
}
@凌驾
public int getCount(){
返回此.dataArray.length();
}
@凌驾
公共对象getItem(int位置){
返回位置;
}
@凌驾
公共长getItemId(int位置){
返回位置;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
最终列表细胞;
if(convertView==null){
convertView=充气机。充气(R.layout.get\u images\u from\u movies\u list\u单元格,空);
cell=新的ListCell();
cell.MovieImages=(ImageView)convertView.findViewById(R.id.movie\u images\u id);
convertView.setTag(单元格);
}否则{
cell=(ListCell)convertView.getTag();
}
试一试{
JSONObject JSONObject=this.dataArray.getJSONObject(位置);
字符串nameOfImage=jsonObject.getString(“图像”);
字符串urlForImageInServer=baseUrlForImage+图像名称;
新建异步任务(){
@凌驾
受保护位图doInBackground(字符串…参数)
{
字符串url=params[0];
位图图标=空;
尝试
{
InputStream in=新URL(URL).openStream();
icon=BitmapFactory.decodeStream(in);
}捕获(IOE异常){
e、 printStackTrace();
}
返回图标;
}
@凌驾
受保护的void onPostExecute(位图结果)
{
cell.MovieImages.setImageBitmap(结果);
}
}.execute(urlForImageInServer);
}捕获(JSONException e){
e、 printStackTrace();
}
返回视图;
}
私有类列表单元{
私人影像查看电影影像;
}}
您可以通过从数组的末尾开始并向后操作到开头来获取每个JSONObject:
JSONObject jsonObject = this.dataArray.getJSONObject(getCount() - position - 1);
您收到的结果尝试以相反的顺序遍历它。 位图结果数据似乎是您获得的单个数据。我希望在查询联机数据库时,在onPostExecute()方法参数中获得一个数组或数据的arraylist。 例如,如果您以onPostExecute(ArrayList结果)的形式获取数据,那么您可以简单地以相反的顺序迭代“结果”数据,以便以相反的顺序填充网格视图
查看您确实意识到这会立即崩溃,索引超出范围,对吗?感谢njzk2,进行了编辑。我想现在应该行了,现在行了。但我不知道为什么图片会以30秒的速度变化(第一张图片是第三张,然后是最后一张,第二张图片是最后一张,然后是第一张,等等),然后它们会以正确的顺序出现。以前它也是这样吗?我不太明白你写了什么,这是不是只有在你滚动列表时才会发生?在远程获取实际图像之前,您可能需要为每个电影图像设置占位符图像,但我不能确定。只有在我滚动时才会发生。谢谢您的回答。我明天试试,然后告诉你。