Search code examples
androidonactivityresult

Android - Receiving image from another ImageView with "startActivityonResultFor"


I am trying to make it where when someone clicks on the default avatar picture it will send them to a separate activity which will contain a selection of avatars to choose from. The user will select one of these avatars and then I want to send the user back to the Main activity, with the avatar ImageView set as the one they selected. I have done this with text, but not with images, and I've reached a point of confusion. Can anyone help me make this possible?

// First View
public class MainActivity extends AppCompatActivity {
    ImageView imageViewSelectAvatarLocal;
    int requestCodeImageBrownHairedFemale = 100;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        imageViewSelectAvatarLocal = findViewById(R.id.imageViewdefaultAvatar);
        imageViewSelectAvatarLocal.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(MainActivity.this, SelectAvatarActivity.class);
                intent.putExtra("Brown Haired Woman", 001);
                startActivityForResult(intent, 100);
            }
        });
    }

    @SuppressLint("ResourceType")
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (resultCode == SelectAvatarActivity.RESULT_OK && data != null){
            if(requestCode == requestCodeImageBrownHairedFemale) {
                //...
            }
        }
    }
}
// Second View
public class SelectAvatarActivity extends AppCompatActivity {
    ImageView imageViewBrownHairedWoman
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_select_avatar);
        imageViewBrownHairedWoman = findViewById(R.id.imageViewBrownHairFemale);
        imageViewBrownHairedWoman.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent();
                intent.getExtras();
                setResult(MainActivity.RESULT_OK, intent);
                finish();
            }
        });

    }
}

Solution

  • How about using array? You have some avatar images. So you can do

    int[] avatars = {R.drawable.avatar0, ... };
    

    In second view, click one of avatar images(each image have position), send position to MainActivity and get value using onActivityResult method.

    For example,

    public class MainActivity extends AppCompatActivity {
        int[] avatars = {R.drawable.avatar0, ... };
        ImageView imageViewSelectAvatarLocal;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            imageViewSelectAvatarLocal = findViewById(R.id.imageViewdefaultAvatar);
            imageViewSelectAvatarLocal.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Intent intent = new Intent(MainActivity.this, SelectAvatarActivity.class);
                    startActivityForResult(intent, 100);
                }
            });
        }
    
        @SuppressLint("ResourceType")
        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            super.onActivityResult(requestCode, resultCode, data);
            if (resultCode == SelectAvatarActivity.RESULT_OK && data != null){
                if(requestCode == 100) {
                  int pos = data.getIntExtra("avatar", 0);
                  imageViewSelectAvatarLocal.setImageResource(avatars[pos]);
                //...
                }
            }
        }
    }
    
    // Second View
    public class SelectAvatarActivity extends AppCompatActivity {
        ImageView avatar0, avatar1, ...;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_select_avatar);
            avatar0 = findViewById(R.id.avatar1);
            avatar0.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Intent intent = new Intent();
                    intent.putExtra("avatar", 0);
                    setResult(MainActivity.RESULT_OK, intent);
                    finish();
                }
            });
    
            //...
        }
    }