I'm not certain if I'm asking this question correctly, because I can't find any information on it at all.
I'd like to know if it's possible to target a view (ImageView) from my Activity that has been added through an ArrayAdapter.
My Activity receives JSON from the server, regarding the user's profile. I display that information into an ArrayAdapter. Within the ArrayAdapter, I have an ImageView that calls a method to change the User's profile image. The user chooses his/her image, and finally, the ImageView changes accordingly.
The problem is I can't actually target the ImageView. Below is my code:
Profile Activity:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my_profile);
userAdapter = new UserAdapter(this, new ArrayList<UserModel>());
listView = (ListView) findViewById(R.id.myProfile_header);
listView.setAdapter(userAdapter);
LayoutInflater inflater = (LayoutInflater) this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
(new FetchUserTask()).execute(Constants.HOST + token.getAccessToken());
image = (ImageView) findViewById(R.id.myProfile_avatar);
avatarChange = (LinearLayout) findViewById(R.id.myProfile_avatar_change);
}
public String uriToPath(Uri uri) {
String res = null;
String[] proj = { MediaStore.Images.Media.DATA };
Cursor cursor = getContentResolver().query(uri, proj, null, null, null);
if(cursor.moveToFirst()){
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
res = cursor.getString(column_index);
}
cursor.close();
return res;
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (data != null && (requestCode == SELECT_IMAGE_CODE || requestCode == CAMERA_IMAGE)) {
Uri uri = Uri.parse("file://"+uriToPath(data.getData()));
Picasso.with(this).load(uri).into(image);
}
/*...*/
}
ProfileAdapter:
/*...*/
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;
if (v == null) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = inflater.inflate(R.layout.profile_header, null);
}
final ViewHolder viewHolder = new ViewHolder(v);
v.setTag(viewHolder);
final UserModel model = user.get(position);
String userAvatar = model.getPhoto();
viewHolder.name.setText(model.getUsername());
viewHolder.email.setText(model.getEmail());
viewHolder.phone.setText(model.getPhone_number());
if (userAvatar != null && !userAvatar.isEmpty()) {
//System.out.println(userAvatar);
Picasso.with(getContext()).load(HOST+userAvatar).into(viewHolder.avatar);
}
viewHolder.avatarChange.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
selectImageFromGallery();
}
});
return v;
}
public void selectImageFromGallery() {
final CharSequence[] items = { "Take Photo", "Choose from Library",
"Cancel" };
AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setTitle("Add Photo!");
builder.setItems(items, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int item) {
if (items[item].equals("Take Photo")) {
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
File f = new File(android.os.Environment
.getExternalStorageDirectory(), "temp.jpg");
intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(f));
((Activity) context).startActivityForResult(intent, CAMERA_IMAGE);
} else if (items[item].equals("Choose from Library")) {
Intent intent = new Intent(
Intent.ACTION_PICK,
android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
intent.setType("image/*");
((Activity) context).startActivityForResult(
Intent.createChooser(intent, "Select File"),
SELECT_IMAGE_CODE);
} else if (items[item].equals("Cancel")) {
dialog.dismiss();
}
}
});
builder.show();
}
/*...*/