как да актуализирате изглед на списък с ново изображение, избрано от галерия

Имам приложение, в което искам да актуализирам изгледа на списък с изображение, избрано от галерията на устройството, когато щракна върху бутона, присъстващ в реда на изгледа на списък. Но не мога да го покажа в списъка. какви са промените, които трябва да направите, за да получите изображението в списък. Ето моят код.

    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() и ListViews?

person Meenal    schedule 27.05.2014