访问两个类Adapter和Activity之间的数据

问题描述 投票:1回答:1

我有两个类PremiumAdapter和PreviewActivity,现在我想通过Onclick方法从PreviewActivity访问PremiumAdapter中的数据和位于onBindViewHolder方法内的数据。

以下是PremiumAdapter.java中的数据:

public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
    PremiumVideo video = data.get(position);
    final VH vh = (VH) holder;
    String price_id = video.price; // target data
    String content_id** = video.content_id; // target data

这里是在PreviewActivity.java上访问数据的地方:

public void onClick(DialogInterface dialogInterface, int i) {
    // Here
}

这是我的完整代码PreviewActivity:

public class PremiumVideoPreviewActivity extends BaseActivity {

private TextView Nama;
private TextView Judul;
private TextView Harga;
private Button btnBuy;
private ImageView imgPreview;
private VideoView video;
MediaController mediaController;
private ProgressBar progressBar;
List<PremiumVideo> premiumVideoList = new ArrayList<>();


@SuppressLint("WrongViewCast")
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_premium_video_preview);
    setDefaultToolbar(true);
    Nama = findViewById(R.id.txtNamaPreview);
    Judul = findViewById(R.id.txtJudulPreview);
    Harga = findViewById(R.id.txtHargaPreview);
    imgPreview = findViewById(R.id.imgPreview);
    video = findViewById(R.id.vv_preview);
    btnBuy = findViewById(R.id.btnBuy);
    progressBar = new ProgressBar(this);

    mediaController = new MediaController(this);
    mediaController.setAnchorView(mediaController);

    video.setMediaController(mediaController);
    video.setZOrderOnTop(true);
    video.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
        @Override
        public void onPrepared(MediaPlayer mediaPlayer) {
            mediaPlayer.setLooping(true);
        }
    });
    video.setOnErrorListener(new MediaPlayer.OnErrorListener() {
        @Override
        public boolean onError(MediaPlayer mediaPlayer, int i, int i1) {
            return false;
        }
    });

    loadPremiumVideo();

    PremiumVideo premiumVideo = new PremiumVideo();
    String nama = premiumVideo.name;
    final String judul = premiumVideo.judul;
    final String harga = premiumVideo.price;
    String img = premiumVideo.thumb_pic;

    Nama.setText(nama);
    Judul.setText(judul);
    Harga.setText(harga);
    Picasso.with(imgPreview.getContext())
            .load(img)
            .into(imgPreview);

    btnBuy.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(final View view) {

            final AlertDialog.Builder adb = new AlertDialog.Builder(PremiumVideoPreviewActivity.this);
            adb.setTitle("Konfirmasi Belangganan");
            adb.setMessage("\n Anda akan berlangganan video ini..");
            adb.setCancelable(false);

            adb.setPositiveButton("Iya", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialogInterface, int i) {
                    progressBar.setVisibility(View.VISIBLE);

                    ContactItem caller = SessionManager.getProfile(PremiumVideoPreviewActivity.this);


// i want use data from PremiumAdapter here  


                    Call<APIResponse<DataJsonCharging>> call = ServicesFactory.getService().getCharging(/* Then passing here */);

                    call.enqueue(new Callback<APIResponse<DataJsonCharging>>() {
                        @Override
                        public void onResponse(Call<APIResponse<DataJsonCharging>> call, Response<APIResponse<DataJsonCharging>> response) {
                            int status = response.code();
                            APIResponse<DataJsonCharging> chargingResponse = response.body();
                            Log.d("SetVideoActivity", "onResponse: " + status);
                            progressBar.setVisibility(View.GONE);
                        }

                        @Override
                        public void onFailure(Call<APIResponse<DataJsonCharging>> call, Throwable t) {
                            Log.d("SetVideoActivity", "onFailure: " + t.getMessage());
                            progressBar.setVisibility(View.GONE);
                        }
                    });

                    PremiumVideoModelCharging judul = new PremiumVideoModelCharging();
                    String judulVideo = judul.getJudul();

                    AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(PremiumVideoPreviewActivity.this);
                    LayoutInflater inflater = (LayoutInflater) PremiumVideoPreviewActivity.this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                    View dialogView = inflater.inflate(R.layout.popup_pembelian, null);
                    dialogBuilder.setView(dialogView);
                    dialogBuilder.setTitle("Berhasil Berlangganan");
                    TextView txtJudul = dialogView.findViewById(R.id.txtNoteJudul);
                    txtJudul.setText(judulVideo);
                    final AlertDialog alertDialog = dialogBuilder.create();
                    alertDialog.getWindow().setLayout(400, 600);
                    alertDialog.setIcon(R.drawable.logo_1);
                    alertDialog.show();

                    Button button = (Button) dialogView.findViewById(R.id.btn_check_collection);
                    button.setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View view) {
                            Intent checkCollectionIntent = new Intent(view.getContext(), UploadVideoToneActivity.class);
                            view.getContext().startActivity(checkCollectionIntent);
                            alertDialog.dismiss();
                        }
                    });

                }
            });
            adb.setNegativeButton("Tidak", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialogInterface, int i) {
                    dialogInterface.cancel();
                }
            });
            AlertDialog alertDialog = adb.create();
            alertDialog.show();
        }
    });

}

private void loadPremiumVideo() {
    Call<APIResponse<List<PremiumVideo>>> call = ServicesFactory.getService().getPremiumVideo();
    call.enqueue(new Callback<APIResponse<List<PremiumVideo>>>() {
        @Override
        public void onResponse(Call<APIResponse<List<PremiumVideo>>> call, Response<APIResponse<List<PremiumVideo>>> response) {
            if (response.isSuccessful() && response.body().isSuccessful()) {
                List<PremiumVideo> data = response.body().data;
                if (data != null) {
                    premiumVideoList.clear();
                    premiumVideoList.addAll(data);
                }
            } else {
                Toast.makeText(PremiumVideoPreviewActivity.this, response.errorBody().toString(), Toast.LENGTH_LONG).show();
            }
        }
        @Override
        public void onFailure(Call<APIResponse<List<PremiumVideo>>> call, Throwable t) {
            Toast.makeText(PremiumVideoPreviewActivity.this, t.getLocalizedMessage(), Toast.LENGTH_LONG).show();
        }
    });
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (resultCode == RESULT_OK) {
        if (requestCode == REQUEST_UPLOAD) {
            if (OwnVideoManager.isOwnVideoExist(this)) {
                Uri ownVideoUri = OwnVideoManager.getOwnVideoUri(this);
                video.setVideoURI(ownVideoUri);
                video.seekTo(100);
            }
        }
    }
    super.onActivityResult(requestCode, resultCode, data);
}

}

这是我的PremiumAdapter:

public class PremiumVideoAdapter extends 
RecyclerView.Adapter<RecyclerView.ViewHolder> {
static List<PremiumVideo> data;
private ClickCallback clickCallback;


public PremiumVideoAdapter(List<PremiumVideo> data) {
    this.data = data;

}
public void setClickCallback(ClickCallback clickCallback) {
    this.clickCallback = clickCallback;
}
public interface ClickCallback {
    void itemClick(PremiumVideo video);
}


@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
    PremiumVideo video = data.get(position);
    final VH vh = (VH) holder; //Target data
    String harga = video.price; //Target Data
android android-recyclerview
1个回答
0
投票

你需要:

在Adapter中创建接口

public interface ClickCallback {
        void itemClick(PremiumVideo video);
    }

在适配器中添加字段和设置器

private ClickCallback clickCallback;




 public void setClickCallback(ClickCallback clickCallback) {
            this.clickCallback = clickCallback;
        }

在Activity中设置并实现回调

episodeAdapter.setClickCallback(this);

在ViewHolder中添加onClickListener

 itemView.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        if(clickCallback!=null){
                            clickCallback.itemClick(date.get(getAdapterPosition()));
                        }
                    }
                });
© www.soinside.com 2019 - 2024. All rights reserved.