Как вызвать метод RecyclerView.Adapter в другом фрагменте - PullRequest
0 голосов
/ 19 апреля 2020

В основном я хочу вызвать метод RecyclerView.Adapter, когда щелкают элементы в BottomSheetDialogFragment.

У меня есть класс адаптера, расширяющий RecyclerView.Adapter для адаптации image_card. xml к представлению реселлера, и фрагмент, который расширяет BottomSheetDialogFragment. Которые содержатся в другом действии под названием ViewAll. java

BottomMenuDailogFragment. java

import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;

import androidx.annotation.Nullable;

import com.google.android.material.bottomsheet.BottomSheetDialogFragment;

public class BottomMenuDailogFragment extends BottomSheetDialogFragment {

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container,
                             @Nullable Bundle savedInstanceState) {

        View viewBottomMenu = inflater.inflate(R.layout.fragment_bottom_menu_modalsheet,
                container, false);

        // Binding layout elements
        LinearLayout upload = viewBottomMenu.findViewById(R.id.upload_bottom_menu);

        // On Upload
        upload.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // Call ImageCardAdapter uploadAnimation()
            }
        });

        return viewBottomMenu;
    }

}

ImageAdapter. java

import android.os.Handler;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.TextView;

import androidx.recyclerview.widget.RecyclerView;

import com.squareup.picasso.Picasso;

import org.jetbrains.annotations.NotNull;

import java.io.File;
import java.util.ArrayList;

public class ImageCardAdapter extends RecyclerView.Adapter<ImageCardAdapter.ImageCardViewHolder> {

    private ArrayList<ImageCard> ImageCardList;

    public static class ImageCardViewHolder extends RecyclerView.ViewHolder {

        static ImageCardViewHolder imgCardInstance;

        public ImageView imageCardCaptured;
        public TextView textViewLocation;
        public TextView textViewCrop;

        public ImageView imageViewUploadFail, imageViewUploadSuccess;
        public ProgressBar progressBarUpload;


        private ImageCardViewHolder(View viewImageCard) {
            super(viewImageCard);
            imageCardCaptured = viewImageCard.findViewById(R.id.imageView_captured);
            textViewLocation = viewImageCard.findViewById(R.id.textView_location);
            textViewCrop = viewImageCard.findViewById(R.id.textView_crop);

            imageViewUploadFail = viewImageCard.findViewById(R.id.imageView_upload_fail);
            imageViewUploadSuccess = viewImageCard.findViewById(R.id.imageView_upload_success);
            progressBarUpload = viewImageCard.findViewById(R.id.progressBar_upload);

        }

        public static ImageCardViewHolder getInstance() {
            return imgCardInstance;
        }

        public void uploadAnimation() {

            imageViewUploadFail.setVisibility(View.INVISIBLE);
            progressBarUpload.setVisibility(View.VISIBLE);
            Handler handler = new Handler();
            handler.postDelayed(new Runnable() {
                public void run() {
                    progressBarUpload.setVisibility(View.INVISIBLE);
                    imageViewUploadSuccess.setVisibility(View.VISIBLE);
                }
            }, 5000);//5 seconds
        }

    }

    public ImageCardAdapter(ArrayList<ImageCard> mImageCardList) {
        ImageCardList = mImageCardList;
    }

    @NotNull
    @Override
    public ImageCardViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View layoutInflaterImageCard = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.image_card, parent, false);
        return new ImageCardViewHolder(layoutInflaterImageCard);

    }

    @Override
    public void onBindViewHolder(ImageCardViewHolder holder, int position) {
        ImageCard currentImageCard = ImageCardList.get(position);

        String imageUrl = currentImageCard.getImageUrl();

        Picasso.get().load(new File(imageUrl)).into(holder.imageCardCaptured);

        holder.textViewLocation.setText(currentImageCard.getLocation());
        holder.textViewCrop.setText(currentImageCard.getCrop());
    }

    @Override
    public int getItemCount() {
        return ImageCardList.size();
    }
}

ViewAll. java

import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.Toast;

import com.google.android.material.bottomappbar.BottomAppBar;
import com.google.android.material.floatingactionbutton.FloatingActionButton;

import java.io.File;
import java.util.ArrayList;


public class ViewAll extends AppCompatActivity {

    private RecyclerView recyclerViewImageCard;
    private RecyclerView.Adapter adapterImageCard;
    private RecyclerView.LayoutManager linearLayoutManagerImageCard;

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

        // Binding layout elements
        BottomAppBar btnBottomMenu = findViewById(R.id.bottom_bar);
        FloatingActionButton fabToCapture = findViewById(R.id.fabToCapture);
        recyclerViewImageCard = findViewById(R.id.recyclerview_image_cards);


        ArrayList<ImageCard> mImageCarList = new ArrayList<>();

        // Populate recyclerview
        String pathImageDirectory = Environment.getExternalStorageDirectory()
                + "/Android/media/com.exampleapp/";
        File directoryImage = new File(pathImageDirectory);
        File[] fileImageList = directoryImage.listFiles();

        if (fileImageList != null) {

            for (int i = 0; i < fileImageList.length; i++) {
                Log.v("-- Image --", fileImageList[i].getName());

                // Add to list
                mImageCarList.add(new ImageCard(fileImageList[i].getAbsolutePath(),
                        "mLocation", "mCrop"));
            }
        }
        else {
            Toast.makeText(ViewAll.this, "No Data Found", Toast.LENGTH_LONG).show();
        }

        // Bind recyclerview and ImageCard adapter
        recyclerViewImageCard.setHasFixedSize(true);
        linearLayoutManagerImageCard = new LinearLayoutManager(this);
        adapterImageCard = new ImageCardAdapter(mImageCarList);

        recyclerViewImageCard.setLayoutManager(linearLayoutManagerImageCard);
        recyclerViewImageCard.setAdapter(adapterImageCard);


        // Bottom Menu
        btnBottomMenu.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                BottomMenuDailogFragment bottomMenuSheet = new BottomMenuDailogFragment();
                bottomMenuSheet.show(getSupportFragmentManager(), "exampleBottomSheet");
            }
        });


    // End of onCreate
    }

}

Поэтому я хочу вызвать uploadAnimation () в ImageAdapter, когда upload.setOnClickListener (), который находится в BottomMenuDailogFragment

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