как обновить список с новым изображением, выбранным из галереи

У меня есть приложение, в котором я хочу обновить свое представление списка изображением, выбранным из галереи устройства, когда я нажал кнопку, присутствующую в строке представления списка. Но я не могу показать это в виде списка. какие изменения нужно сделать, чтобы изображение попало в список. Вот мой код.

    public class MainActivity extends Activity {
 ArrayList<Contact> imageArry = new ArrayList<Contact>();
 ContactImageAdapter adapter;
 Bitmap bmp;
 int posi;
 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  // add image and text in arraylist
  imageArry.add(new Contact(R.drawable.ic_launcher, "FaceBook"));
  imageArry.add(new Contact(R.drawable.ic_launcher, "Google"));
  imageArry.add(new Contact(R.drawable.ic_launcher, "Ical"));
  imageArry.add(new Contact(R.drawable.ic_launcher, "Outlook"));
  imageArry.add(new Contact(R.drawable.ic_launcher, "Twitter"));

  // add data in contact image adapter
  adapter = new ContactImageAdapter(this, R.layout.fragment_main, imageArry);
  ListView dataList = (ListView) findViewById(R.id.list);
  dataList.setAdapter(adapter);

 }
 public void removeAtomPayOnClickHandler(View v) {
        Contact itemToRemove = (Contact)v.getTag();
        //adapter.remove(itemToRemove);
        Intent i = new Intent(
                Intent.ACTION_PICK,
                android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);

        startActivityForResult(i, 0);
        //adapter.insert(new AtomPayment("bbbb", 0), 0);
    }
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
         posi=ContactImageAdapter.pos;
        if ( resultCode == RESULT_OK && null != data) {
            Uri selectedImage = data.getData();
            String[] filePathColumn = { MediaStore.Images.Media.DATA };

            Cursor cursor = getContentResolver().query(selectedImage,
                    filePathColumn, null, null, null);
            cursor.moveToFirst();

            int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
            String picturePath = cursor.getString(columnIndex);
            cursor.close();
            // ImageView iv= (ImageView) findViewById(R.id.imageView2);
             bmp=  BitmapFactory.decodeFile(picturePath);
             //iv.setImageBitmap(BitmapFactory.decodeFile(picturePath));
             imageArry.add(new Contact(R.drawable.ic_launcher, "Twitter"));
             System.out.println("aaaaaaaaaaaaaaaaaaaaaa"+ContactImageAdapter.pos+"-----"+posi);
        }


    }
}

а вот код для contact.java

    public class Contact {

 int image;
 String name;
 public int getImage() {
  return image;
 }
 public void setImage(int image) {
  this.image = image;
 }
 public String getName() {
  return name;
 }
 public void setName(String name) {
  this.name = name;
 }
 public Contact(int image, String name) {
  super();
  this.image = image;
  this.name = name;
 }

}

и класс адаптера

public class ContactImageAdapter extends ArrayAdapter<Contact>{
  Context context;
    public  static int pos;
     int layoutResourceId;   
      ArrayList<Contact> data=new ArrayList<Contact>();
     public ContactImageAdapter(Context context, int layoutResourceId, ArrayList<Contact> 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;
         ImageHolder holder = null;
         pos=position;
         if(row == null)
         {
             LayoutInflater inflater = ((Activity)context).getLayoutInflater();
             row = inflater.inflate(layoutResourceId, parent, false);

             holder = new ImageHolder();
             holder.txtTitle = (TextView)row.findViewById(R.id.txtTitle);
             holder.imgIcon = (ImageView)row.findViewById(R.id.imgIcon);
             row.setTag(holder);
         }
         else
         {
             holder = (ImageHolder)row.getTag();
         }

         Contact myImage = data.get(position);
         holder.txtTitle.setText(myImage.name);
            int outImage=myImage.image;
         holder.imgIcon.setImageResource(outImage);
        return row;

     }

     static class ImageHolder
     {
         ImageView imgIcon;
         TextView txtTitle;
     }
 }

person user3655765    schedule 27.05.2014    source источник


Ответы (2)


Используйте notifyDataSetChanged каждый раз при обновлении списка. Тогда notifyDataSetChangedбудет работать. См. это.

person tilak    schedule 27.05.2014

Добавьте новое изображение в свой массив изображений ... и вызовите notifyDataSetChanged .. он обновит ваш список. Перейдите по этой ссылке, где все подробно объясняется Android. Как работают метод notifyDataSetChanged () и ListView?

person Meenal    schedule 27.05.2014