Android:从Gallery中获取多个图像,并在Android的列表视图中填充它们

Android:从Gallery中获取多个图像,并在Android的列表视图中填充它们,android,listview,Android,Listview,我想从Gallery中获取多个图像,并在ListView中填充这些图像。首先,不使用第三方库是否可以实现这一点 这就是我目前正在做的。。。。 我正在使用universal_image_loader从Gallery中获取多个图像,但无法在ListView中填充它们 “main.xml”-imageList是包含来自Gallery的图像的列表 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="ht

我想从Gallery中获取多个图像,并在ListView中填充这些图像。首先,不使用第三方库是否可以实现这一点

这就是我目前正在做的。。。。 我正在使用universal_image_loader从Gallery中获取多个图像,但无法在ListView中填充它们

“main.xml”-imageList是包含来自Gallery的图像的列表

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_weight="0.85"
    android:orientation="horizontal" >

    <ImageView
        android:id="@+id/image1"
        android:layout_width="100dp"
        android:layout_height="match_parent"
        android:layout_gravity="left"
        android:layout_weight="1" />

    <ListView
        android:id="@+id/imageList"
        android:layout_width="70dp"
        android:layout_height="match_parent"
        android:layout_gravity="right"
        android:layout_weight="1" >

</ListView>
</LinearLayout>

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal" >

    <Button
        android:id="@+id/button_photo"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="getPhoto"
        android:text="Gallery" />
</LinearLayout>

</LinearLayout>
public class ListAdapter extends BaseAdapter {

private static LayoutInflater inflater=null;
private Activity activity;
private ArrayList<String> imageData;

public ListAdapter(Activity a, ArrayList<String> list) {
    activity = a;
    imageData = list;
    inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}

@Override
public int getCount() {
    // TODO Auto-generated method stub
    return imageData.size();
}

@Override
public Object getItem(int position) {
    // TODO Auto-generated method stub
    return position;
}

@Override
public long getItemId(int position) {
    // TODO Auto-generated method stub
    return position;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View vi = convertView;

    if(convertView==null)
        vi = inflater.inflate(R.layout.list_row, null);

    ImageView thumb_image=(ImageView)vi.findViewById(R.id.imageThumb); // thumb image
    TextView text=(TextView)vi.findViewById(R.id.listText);

    Bitmap myBitmap = BitmapFactory.decodeFile(imageData.get(position));
    thumb_image.setImageBitmap(myBitmap);
    text.setText(position);

    return vi;
}

}

“list\u row.xml”-查看列表的单行

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

<ImageView
        android:id="@+id/imageThumb"
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:src="@drawable/index"/>

<TextView 
    android:id="@+id/listText"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"/>


</LinearLayout>

“MainActivity.java”

公共类MainActivity扩展活动{
按钮照片;
图像视图图像1;
ListView图像列表;
列表适配器;
ArrayList selectedPhotosList=null;
字符串[]selectedPhotos=null;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
//TODO自动生成的方法存根
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
buttonPhoto=(按钮)findViewById(R.id.Button\u照片);
imageList=(ListView)findViewById(R.id.imageList);
adapter=新列表adapter(此,selectedPhotosList);
设置适配器(适配器);
}
公共void getPhoto(视图){
Intent i=新Intent(这是MultiPhotoSelectActivity.class);
startActivityForResult(i,0);
}
@凌驾
受保护的void onActivityResult(int请求代码、int结果代码、意图数据){
super.onActivityResult(请求代码、结果代码、数据);
if(requestCode==0){
selectedPhotosList=data.getStringArrayListExtra(“selectedPhotos”);
//刷新列表
adapter.notifyDataSetChanged();
Log.d(MultiPhotoSelectActivity.class.getSimpleName(),“选定照片:“+selectedPhotos”);
}
}
}
“ListAdapter.java”-用于从库中填充图像的列表的适配器

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_weight="0.85"
    android:orientation="horizontal" >

    <ImageView
        android:id="@+id/image1"
        android:layout_width="100dp"
        android:layout_height="match_parent"
        android:layout_gravity="left"
        android:layout_weight="1" />

    <ListView
        android:id="@+id/imageList"
        android:layout_width="70dp"
        android:layout_height="match_parent"
        android:layout_gravity="right"
        android:layout_weight="1" >

</ListView>
</LinearLayout>

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal" >

    <Button
        android:id="@+id/button_photo"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="getPhoto"
        android:text="Gallery" />
</LinearLayout>

</LinearLayout>
public class ListAdapter extends BaseAdapter {

private static LayoutInflater inflater=null;
private Activity activity;
private ArrayList<String> imageData;

public ListAdapter(Activity a, ArrayList<String> list) {
    activity = a;
    imageData = list;
    inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}

@Override
public int getCount() {
    // TODO Auto-generated method stub
    return imageData.size();
}

@Override
public Object getItem(int position) {
    // TODO Auto-generated method stub
    return position;
}

@Override
public long getItemId(int position) {
    // TODO Auto-generated method stub
    return position;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View vi = convertView;

    if(convertView==null)
        vi = inflater.inflate(R.layout.list_row, null);

    ImageView thumb_image=(ImageView)vi.findViewById(R.id.imageThumb); // thumb image
    TextView text=(TextView)vi.findViewById(R.id.listText);

    Bitmap myBitmap = BitmapFactory.decodeFile(imageData.get(position));
    thumb_image.setImageBitmap(myBitmap);
    text.setText(position);

    return vi;
}

}
公共类ListAdapter扩展了BaseAdapter{
专用静态充气机=空;
私人活动;
私有ArrayList图像数据;
公共ListAdapter(活动a,ArrayList列表){
活动=a;
imageData=列表;
充气器=(LayoutInflater)activity.getSystemService(Context.LAYOUT\u充气器\u SERVICE);
}
@凌驾
public int getCount(){
//TODO自动生成的方法存根
返回imageData.size();
}
@凌驾
公共对象getItem(int位置){
//TODO自动生成的方法存根
返回位置;
}
@凌驾
公共长getItemId(int位置){
//TODO自动生成的方法存根
返回位置;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
视图vi=转换视图;
if(convertView==null)
vi=充气机充气(R.layout.list_行,空);
ImageView thumb_image=(ImageView)vi.findViewById(R.id.imageThumb);//thumb image
TextView text=(TextView)vi.findViewById(R.id.listText);
Bitmap myBitmap=BitmapFactory.decodeFile(imageData.get(position));
thumb_image.setImageBitmap(myBitmap);
text.setText(位置);
返回vi;
}
}
当我回到MainActivity时,我在ListView中看不到任何图像。请帮帮我。我做错了什么

编辑

“MultiPhotoSelectActivity.java-返回所有选定图像的路径

package com.example.demo1;

import java.util.ArrayList;

import android.content.Context;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.provider.MediaStore;
import android.util.Log;
import android.util.SparseBooleanArray;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.BaseAdapter;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.Toast;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.GridView;
import android.widget.ImageView;

import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.assist.SimpleImageLoadingListener;


public class MultiPhotoSelectActivity extends BaseActivity {

private ArrayList<String> imageUrls;
private DisplayImageOptions options;
private ImageAdapter imageAdapter;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.ac_image_grid);

    final String[] columns = { MediaStore.Images.Media.DATA, MediaStore.Images.Media._ID };
    final String orderBy = MediaStore.Images.Media.DATE_TAKEN;
    Cursor imagecursor = managedQuery(
            MediaStore.Images.Media.EXTERNAL_CONTENT_URI, columns, null,
            null, orderBy + " DESC");

    this.imageUrls = new ArrayList<String>();

    for (int i = 0; i < imagecursor.getCount(); i++) {
        imagecursor.moveToPosition(i);
        int dataColumnIndex = imagecursor.getColumnIndex(MediaStore.Images.Media.DATA);
        imageUrls.add(imagecursor.getString(dataColumnIndex));

        System.out.println("=====> Array path => "+imageUrls.get(i));
    }

    options = new DisplayImageOptions.Builder()
        .showStubImage(R.drawable.stub_image)
        .showImageForEmptyUri(R.drawable.image_for_empty_url)
        .cacheInMemory()
        .cacheOnDisc()
        .build();

    imageAdapter = new ImageAdapter(this, imageUrls);

    GridView gridView = (GridView) findViewById(R.id.gridview);
    gridView.setAdapter(imageAdapter);
    /*gridView.setOnItemClickListener(new OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            startImageGalleryActivity(position);
        }
    });*/
}

@Override
protected void onStop() {
    imageLoader.stop();
    super.onStop();
}

public void btnChoosePhotosClick(View v){

    ArrayList<String> selectedItems = imageAdapter.getCheckedItems();
    Toast.makeText(MultiPhotoSelectActivity.this, "Total photos selected: "+selectedItems.size(), Toast.LENGTH_SHORT).show();
    Log.d(MultiPhotoSelectActivity.class.getSimpleName(), "Selected Items: " + selectedItems.toString());
}

/*private void startImageGalleryActivity(int position) {
    Intent intent = new Intent(this, ImagePagerActivity.class);
    intent.putExtra(Extra.IMAGES, imageUrls);
    intent.putExtra(Extra.IMAGE_POSITION, position);
    startActivity(intent);
}*/

public class ImageAdapter extends BaseAdapter {

    ArrayList<String> mList;
    LayoutInflater mInflater;
    Context mContext;
    SparseBooleanArray mSparseBooleanArray;

    public ImageAdapter(Context context, ArrayList<String> imageList) {
        // TODO Auto-generated constructor stub
        mContext = context;
        mInflater = LayoutInflater.from(mContext);
        mSparseBooleanArray = new SparseBooleanArray();
        mList = new ArrayList<String>();
        this.mList = imageList;

    }

    public ArrayList<String> getCheckedItems() {
        ArrayList<String> mTempArry = new ArrayList<String>();

        for(int i=0;i<mList.size();i++) {
            if(mSparseBooleanArray.get(i)) {
                mTempArry.add(mList.get(i));
            }
        }

        return mTempArry;
    }

    @Override
    public int getCount() {
        return imageUrls.size();
    }

    @Override
    public Object getItem(int position) {
        return null;
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        if(convertView == null) {
            convertView = mInflater.inflate(R.layout.row_multiphoto_item, null);
        }

        CheckBox mCheckBox = (CheckBox) convertView.findViewById(R.id.checkBox1);
        final ImageView imageView = (ImageView) convertView.findViewById(R.id.imageView1);

        imageLoader.displayImage("file://"+imageUrls.get(position), imageView, options, new SimpleImageLoadingListener() {
            @Override
            public void onLoadingComplete(Bitmap loadedImage) {
                Animation anim = AnimationUtils.loadAnimation(MultiPhotoSelectActivity.this, R.anim.fade_in);
                imageView.setAnimation(anim);
                anim.start();
            }
        });

        mCheckBox.setTag(position);
        mCheckBox.setChecked(mSparseBooleanArray.get(position));
        mCheckBox.setOnCheckedChangeListener(mCheckedChangeListener);

        return convertView;
    }

    OnCheckedChangeListener mCheckedChangeListener = new OnCheckedChangeListener() {

        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            // TODO Auto-generated method stub
            mSparseBooleanArray.put((Integer) buttonView.getTag(), isChecked);
        }
    };
}

}
package com.example.demo1;
导入java.util.ArrayList;
导入android.content.Context;
导入android.database.Cursor;
导入android.graphics.Bitmap;
导入android.os.Bundle;
导入android.provider.MediaStore;
导入android.util.Log;
导入android.util.SparseBooleanArray;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.ViewGroup;
导入android.view.animation.animation;
导入android.view.animation.AnimationUtils;
导入android.widget.BaseAdapter;
导入android.widget.CheckBox;
导入android.widget.CompoundButton;
导入android.widget.Toast;
导入android.widget.CompoundButton.OnCheckedChangeListener;
导入android.widget.GridView;
导入android.widget.ImageView;
导入com.nostra13.universalimageloader.core.DisplayImageOptions;
导入com.nostra13.universalimageloader.core.assist.simplemageLoadingListener;
公共类多光子选择活动扩展了BaseActivity{
私有ArrayList ImageURL;
私有显示图像选项;
专用图像适配器;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.ac_image_grid);
最终字符串[]列={MediaStore.Images.Media.DATA,MediaStore.Images.Media.\u ID};
最终字符串orderBy=MediaStore.Images.Media.DATE\u;
游标imagecursor=managedQuery(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI,列,null,
null,orderBy+“DESC”);
this.imageUrls=newArrayList();
对于(int i=0;i数组路径=>”+imageURL.get(i));
}
选项=新建DisplayImageOptions.Builder()
.showStubImage(R.drawable.stub_图像)
.showImageForEmptyUri(R.drawable.image\u表示\u空\u url)
.cacheInMemory()
.cacheOnDisc()
.build();
imageAdapter=新的imageAdapter(这是ImageURL);
GridView GridView=(GridView)findViewById(R.id.GridView);
setAdapter(imageAdapter);
/*setOnItemClickListener(新的OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父对象、视图、整型位置、长id){
startImageGalleryActivity(职位);
}
});*/
}
@凌驾
受保护的void onStop(){
imageLoader.stop();
super.onStop();
}
公共无效btnChoosePhotosClick(视图五){
ArrayList selectedItems=imageAdapter.getCheckedItems();
蟾蜍