简体   繁体   English

如何在我的主要活动中使用片段中的 ImageViews

[英]How to use ImageViews from fragment in my mainactivity

So i have a SettingsActivity/layout with ImageViews, and can upload images from my phone gallery to these ImageViews which also then upload to firebase.所以我有一个带有 ImageViews 的 SettingsActivity/layout,并且可以将我手机图库中的图像上传到这些 ImageViews,然后再上传到 firebase。 There are currently 3 edit views and everything works fine until i wanted to try the following:目前有 3 个编辑视图,一切正常,直到我想尝试以下操作:

Now i wanted to have the ability to increase the amount of ImageViews upon certain criteria being met.现在我希望能够在满足某些条件时增加 ImageViews 的数量。 For this i decided to move the ImageViews from this activity to a fragment activity and I created another activity with double the ImageViews.为此,我决定将 ImageViews 从这个活动移动到一个片段活动,我创建了另一个具有两倍 ImageViews 的活动。 All the code for the upload/download of these ImageViews happen in the SettingsActivity.上传/下载这些 ImageView 的所有代码都发生在 SettingsActivity 中。 What's the best way to go about this?解决这个问题的最佳方法是什么? I've tried moving all the code over to the fragment activity but I end up with too much issues.我尝试将所有代码移至片段活动,但最终遇到了太多问题。 What's the best way to go about using these imagesviews in the fragments(I have onclick listeners and other stuff that need the imageviews) in the SettingsActivity:在 SettingsActivity 的片段中使用这些图像视图的最佳方法是什么(我有 onclick 侦听器和其他需要图像视图的东西):

SettingsActivity.Java设置Activity.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 (Fragment) 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;
    }

Fragment's Layout(Moved the ImageViews from SettingsActivity to here) Fragment 的布局(将 ImageViews 从 SettingsActivity 移到此处)

<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>

It is easy!!这很容易!! Just use interface between your activity and fragment!!只需在您的活动和片段之间使用接口! Like this link below!!喜欢下面这个链接!!

Communicating between a fragment and an activity - best practices在片段和活动之间进行通信 - 最佳实践

thanks for the info.谢谢(你的)信息。 Had a look at using interfaces which seems useful with simply tasks, but with so much going on in the activity with the imageviews it became really confusing and difficult to understand how to incorporate the interfaces to work with this app.看了一下使用界面,这似乎对简单的任务很有用,但是随着图像视图活动中发生的这么多事情,它变得非常混乱并且难以理解如何将界面合并到这个应用程序中。 So to simplify my life, I successfully managed to move all of the methods that utilize the ImageViews over to the fragment activity.因此,为了简化我的生活,我成功地将所有利用 ImageViews 的方法转移到片段活动中。 Now i will do the same for the other fragment(only difference is it has double the imageviews), and will use a bolean or something to flick between the fragments.现在我将对另一个片段做同样的事情(唯一的区别是它有两倍的图像视图),并且将使用 bolean 或其他东西在片段之间轻弹。 Not sure if this is the best way, specifically performance wise, but i ran the app and it seemed okay.不确定这是否是最好的方法,特别是在性能方面,但我运行了该应用程序,看起来还不错。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM