Как использовать ImageViews из фрагмента в моей основной деятельности - PullRequest
0 голосов
/ 03 апреля 2019

Итак, у меня есть SettingsActivity / layout с ImageViews, и я могу загружать изображения из моей телефонной галереи в эти ImageViews, которые также затем загружаются в firebase. В настоящее время есть 3 вида редактирования, и все работает нормально, пока я не попробую следующее:

Теперь я хотел, чтобы у меня была возможность увеличить количество ImageViews при соблюдении определенных критериев. Для этого я решил переместить ImageViews из этого действия в действие фрагмента, и я создал другое действие с двойным ImageViews. Весь код для загрузки / выгрузки этих ImageViews происходит в Настройках. Какой лучший способ пойти по этому поводу? Я попытался перенести весь код на активность фрагмента, но у меня слишком много проблем. Как лучше всего использовать эти изображения в фрагментах (у меня есть слушатели onclick и другие вещи, которые нуждаются в просмотре изображений) в настройках ActivityActivity:

SettingsActivity.Java

    public class SettingsActivity extends AppCompatActivity {

        private ImageView mImage1, mImage2, mImage3;
        private String image1Url, image2Url, image3Url;

        public static FragmentManager fragmentManager;

        final int MaxTags = 5;
        private int MaxImages = 3;

        @Override
        protected void onCreate(final Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_settings);

            fragmentManager = getSupportFragmentManager();
            if(findViewById(R.id.profileImageContainer) != null){
                if(savedInstanceState!=null)
                    return;
                FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
                SettingsDefault settingsDefault = new SettingsDefault();
                fragmentTransaction.add(R.id.profileImageContainer, settingsDefault, null);
                fragmentTransaction.commit();
            }

    getUserInfo();

            mImage1 = findViewById(R.id.image1);
            mImage2 = findViewById(R.id.image2);
            mImage3 = findViewById(R.id.image3);

            mUserDb = FirebaseDatabase.getInstance().getReference().child("Users").child(userId);

            mImage1.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Intent intent = new Intent(Intent.ACTION_PICK);
                    intent.setType("image/*");
                    startActivityForResult(intent, 1);
                }
            });
            mImage2.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Intent intent = new Intent(Intent.ACTION_PICK);
                    intent.setType("image/*");
                    startActivityForResult(intent, 2);
                }
            });
            mImage3.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Intent intent = new Intent(Intent.ACTION_PICK);
                    intent.setType("image/*");
                    startActivityForResult(intent, 3);
                }
            });

        ArrayAdapter<String> values;
        private void getUserInfo() {

            mUserDb.addListenerForSingleValueEvent(new ValueEventListener() {
                @Override
                public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                    if(dataSnapshot.exists() && dataSnapshot.getChildrenCount()>0){


                        Map<String, Object> map = (Map<String, Object>) dataSnapshot.getValue();
                        if(map.get("phone") != null){
                            phone = map.get("phone").toString();
                            mPhoneField.setText(phone);
                        }
                        if(map.get("sex") != null){
                            userSex = map.get("sex").toString();
                        }

                        Glide.clear(mImage1);
                        if(map.get("image1Url") != null){
                            image1Url = map.get("image1Url").toString();
                            switch(image1Url){
                                case "default":
                                    mImage1.setImageResource(R.mipmap.ic_launcher);

                                    break;
                                default:
                                    Glide.with(getApplication()).load(image1Url).into(mImage1);
                                    break;
                            }
                        }
                        if(map.get("image2Url") != null){
                            image2Url = map.get("image2Url").toString();
                            switch(image2Url){
                                case "default":
                                    mImage2.setImageResource(R.mipmap.ic_launcher);

                                    break;
                                default:
                                    Glide.with(getApplication()).load(image2Url).into(mImage2);
                                    break;
                            }
                        }
                        if(map.get("image3Url") != null){
                            image3Url = map.get("image3Url").toString();
                            switch(image3Url){
                                case "default":
                                    mImage3.setImageResource(R.mipmap.ic_launcher);
                break;
                                default:
                                    Glide.with(getApplication()).load(image3Url).into(mImage3);
                                    break;
                            }
                        }
                    }
                }

                @Override
                public void onCancelled(@NonNull DatabaseError databaseError) {

                }
            });
        }




        @Override
        protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
            super.onActivityResult(requestCode, resultCode, data);
            if(requestCode == 1 && resultCode == Activity.RESULT_OK){
                final Uri imageUri = data.getData();
                final Uri resultUri = imageUri;
                if(resultUri != null){
                    final StorageReference filePath = FirebaseStorage.getInstance().getReference().child("profileImages").child(userId).child("image1");
                    Bitmap bitmap = null;

                    try {
                        bitmap = MediaStore.Images.Media.getBitmap(getApplication().getContentResolver(), resultUri);
                    } catch (IOException e) {
                        e.printStackTrace();
                    }

                    ByteArrayOutputStream baos = new ByteArrayOutputStream();
                    bitmap.compress(Bitmap.CompressFormat.JPEG, 20, baos);
                    byte[] databytes = baos.toByteArray();
                    UploadTask uploadTask = filePath.putBytes(databytes);
                    uploadTask.addOnFailureListener(new OnFailureListener() {
                        @Override
                        public void onFailure(@NonNull Exception e) {
                            Toast toast = Toast.makeText(SettingsActivity.this, "Upload Failed! Please try again", Toast.LENGTH_LONG);
                            toast.setGravity(Gravity.CENTER, 0, 0);
                            toast.show();
                        }
                    });
                    uploadTask.addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
                        @Override
                        public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                            filePath.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
                                @Override
                                public void onSuccess(Uri uri) {
                                    Map newImage = new HashMap();
                                    newImage.put("image1Url", uri.toString());
                                    mUserDb.updateChildren(newImage);
                                    mImage1.setImageURI(resultUri);
                                    Toast toast = Toast.makeText(SettingsActivity.this, "Upload Successful!", Toast.LENGTH_LONG);
                                    toast.setGravity(Gravity.CENTER, 0, 0);
                                    toast.show();
                                }
                            }).addOnFailureListener(new OnFailureListener() {
                                @Override
                                public void onFailure(@NonNull Exception exception) {
                                    Toast toast = Toast.makeText(SettingsActivity.this, "Upload Failed! Please try again", Toast.LENGTH_LONG);
                                    toast.setGravity(Gravity.CENTER, 0, 0);
                                    toast.show();
                                }
                            });
                        }
                    });

                }else{
                    finish();
                }

            }
            if(requestCode == 2 && resultCode == Activity.RESULT_OK){
                final Uri imageUri = data.getData();
                final Uri resultUri = imageUri;
                if(resultUri != null){
                    final StorageReference filePath = FirebaseStorage.getInstance().getReference().child("profileImages").child(userId).child("image2");
                    Bitmap bitmap = null;

                    try {
                        bitmap = MediaStore.Images.Media.getBitmap(getApplication().getContentResolver(), resultUri);
                    } catch (IOException e) {
                        e.printStackTrace();
                    }

                    ByteArrayOutputStream baos = new ByteArrayOutputStream();
                    bitmap.compress(Bitmap.CompressFormat.JPEG, 20, baos);
                    byte[] databytes = baos.toByteArray();
                    UploadTask uploadTask = filePath.putBytes(databytes);
                    uploadTask.addOnFailureListener(new OnFailureListener() {
                        @Override
                        public void onFailure(@NonNull Exception e) {
                            Toast toast = Toast.makeText(SettingsActivity.this, "Upload Failed! Please try again", Toast.LENGTH_LONG);
                            toast.setGravity(Gravity.CENTER, 0, 0);
                            toast.show();
                        }
                    });
                    uploadTask.addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
                        @Override
                        public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                            filePath.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
                                @Override
                                public void onSuccess(Uri uri) {
                                    Map newImage = new HashMap();
                                    newImage.put("image2Url", uri.toString());
                                    mUserDb.updateChildren(newImage);
                                    mImage2.setImageURI(resultUri);
                                    Toast toast = Toast.makeText(SettingsActivity.this, "Upload Successful!", Toast.LENGTH_LONG);
                                    toast.setGravity(Gravity.CENTER, 0, 0);
                                    toast.show();
                                }
                            }).addOnFailureListener(new OnFailureListener() {
                                @Override
                                public void onFailure(@NonNull Exception exception) {
                                    Toast toast = Toast.makeText(SettingsActivity.this, "Upload Failed! Please try again", Toast.LENGTH_LONG);
                                    toast.setGravity(Gravity.CENTER, 0, 0);
                                    toast.show();
                                }
                            });
                        }
                    });

                }else{
                    finish();
                }
            }
            if(requestCode == 3 && resultCode == Activity.RESULT_OK){
                final Uri imageUri = data.getData();
                final Uri resultUri = imageUri;
                if(resultUri != null){
                    final StorageReference filePath = FirebaseStorage.getInstance().getReference().child("profileImages").child(userId).child("image3");
                    Bitmap bitmap = null;

                    try {
                        bitmap = MediaStore.Images.Media.getBitmap(getApplication().getContentResolver(), resultUri);
                    } catch (IOException e) {
                        e.printStackTrace();
                    }

                    ByteArrayOutputStream baos = new ByteArrayOutputStream();
                    bitmap.compress(Bitmap.CompressFormat.JPEG, 20, baos);
                    byte[] databytes = baos.toByteArray();
                    UploadTask uploadTask = filePath.putBytes(databytes);
                    uploadTask.addOnFailureListener(new OnFailureListener() {
                        @Override
                        public void onFailure(@NonNull Exception e) {
                            Toast toast = Toast.makeText(SettingsActivity.this, "Upload Failed! Please try again", Toast.LENGTH_LONG);
                            toast.setGravity(Gravity.CENTER, 0, 0);
                            toast.show();
                        }
                    });
                    uploadTask.addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
                        @Override
                        public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                            filePath.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
                                @Override
                                public void onSuccess(Uri uri) {
                                    Map newImage = new HashMap();
                                    newImage.put("image3Url", uri.toString());
                                    mUserDb.updateChildren(newImage);
                                    mImage3.setImageURI(resultUri);
                                    Toast toast = Toast.makeText(SettingsActivity.this, "Upload Successful!", Toast.LENGTH_LONG);
                                    toast.setGravity(Gravity.CENTER, 0, 0);
                                    toast.show();
                                }
                            }).addOnFailureListener(new OnFailureListener() {
                                @Override
                                public void onFailure(@NonNull Exception exception) {
                                    Toast toast = Toast.makeText(SettingsActivity.this, "Upload Failed! Please try again", Toast.LENGTH_LONG);
                                    toast.setGravity(Gravity.CENTER, 0, 0);
                                    toast.show();
                                }
                            });
                        }
                    });

                }else{
                    finish();
                }
            }
        }
    }

SettingsDefault.Java (Фрагмент)

public class SettingsDefault extends Fragment {

    ImageView mImageView1;
    ImageView mImageView2;
    ImageView mImageView3;

    public SettingsDefault() {
        // Required empty public constructor
    }


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View view = inflater.inflate(R.layout.fragment_settings_default, container, false);
        mImageView1 = view.findViewById(R.id.image1);
        mImageView2 = view.findViewById(R.id.image2);
        mImageView3 = view.findViewById(R.id.image3);
        return view;
    }

    public ImageView getImageView1(){
        return  mImageView1;
    }
    public ImageView getImageView2(){
        return  mImageView2;
    }
    public ImageView getImageView3(){
        return  mImageView3;
    }

Макет фрагмента (Переместил ImageViews из НастройкиActivity в здесь)

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    tools:context=".Fragments.ProfileImages.SettingsUpgade1">

    <!-- TODO: Update blank fragment layout -->
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:layout_marginBottom="10sp"
        android:weightSum="3">


        <ImageView
            android:layout_weight="0.5"
            android:layout_width="0dp"
            android:layout_height="100dp"
            android:id="@+id/image1"
            android:src="@mipmap/ic_launcher"
            android:layout_margin="20sp"
            android:scaleType="centerCrop"
            />
        <ImageView
            android:layout_weight="0.5"
            android:layout_width="0dp"
            android:layout_height="100dp"
            android:id="@+id/image2"
            android:src="@mipmap/ic_launcher"
            android:layout_margin="20sp"
            android:scaleType="centerCrop"

            />
        <ImageView
            android:layout_weight="0.5"
            android:layout_width="0dp"
            android:layout_height="100dp"
            android:id="@+id/image3"
            android:src="@mipmap/ic_launcher"
            android:layout_margin="20sp"
            android:scaleType="centerCrop"
            />
        <ImageView
            android:layout_weight="0.5"
            android:layout_width="0dp"
            android:layout_height="100dp"
            android:id="@+id/image4"
            android:src="@mipmap/ic_launcher"
            android:layout_margin="20sp"
            android:scaleType="centerCrop"
            />
        <ImageView
            android:layout_weight="0.5"
            android:layout_width="0dp"
            android:layout_height="100dp"
            android:id="@+id/image5"
            android:src="@mipmap/ic_launcher"
            android:layout_margin="20sp"
            android:scaleType="centerCrop"

            />
        <ImageView
            android:layout_weight="0.5"
            android:layout_width="0dp"
            android:layout_height="100dp"
            android:id="@+id/image6"
            android:src="@mipmap/ic_launcher"
            android:layout_margin="20sp"
            android:scaleType="centerCrop"
            />

    </LinearLayout>

</FrameLayout>

Ответы [ 2 ]

0 голосов
/ 03 апреля 2019

спасибо за информацию. Мы рассмотрели использование интерфейсов, которые кажутся полезными для простых задач, но из-за того, что в работе с изображениями так много всего происходит, стало очень запутанно и трудно понять, как включить интерфейсы для работы с этим приложением. Таким образом, чтобы упростить свою жизнь, мне удалось перенести все методы, использующие ImageViews, на активность фрагмента. Теперь я сделаю то же самое для другого фрагмента (с той лишь разницей, что он имеет двойные изображения), и буду использовать логическое значение или что-то другое для переключения между фрагментами. Не уверен, что это лучший способ, особенно с точки зрения производительности, но я запустил приложение, и все выглядело нормально.

0 голосов
/ 03 апреля 2019

Это легко!Просто используйте интерфейс между вашей деятельностью и фрагментом !!Как эта ссылка ниже !!

Связь между фрагментом и действием - лучшие практики

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...