package com.example.ms15;
import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.RecyclerView;
import androidx.viewpager2.widget.ViewPager2;
import com.bumptech.glide.Glide;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;
import java.util.ArrayList;
import java.util.List;
public class DetailsActivity extends AppCompatActivity {
private ViewPager2 viewPager;
private DataAdapter adapter;
private List<DataItem> dataItems = new ArrayList<>();
private int currentPosition = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_recycle);
viewPager = findViewById(R.id.viewPager);
viewPager.setOrientation(ViewPager2.ORIENTATION_HORIZONTAL);
adapter = new DataAdapter();
viewPager.setAdapter(adapter);
// Retrieve the intent data
Intent intent = getIntent();
if (intent != null) {
DatabaseReference databaseRef = FirebaseDatabase.getInstance().getReference().child("see");
databaseRef.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
dataItems.clear();
for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
String admissionFee = snapshot.child("Admission Fee").getValue(String.class);
String parkPrice = snapshot.child("ParkPrice").getValue(String.class);
String time = snapshot.child("Time").getValue(String.class);
String imageUrl = snapshot.child("Url").getValue(String.class);
DataItem dataItem = new DataItem(admissionFee, parkPrice, time, imageUrl);
dataItems.add(dataItem);
}
adapter.setData(dataItems);
// 현재 position에 맞는 데이터를 보여줌
if (currentPosition < dataItems.size()) {
viewPager.setCurrentItem(currentPosition, false);
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
// Handle error
}
});
}
// ViewPager2의 현재 position을 기록
viewPager.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {
@Override
public void onPageSelected(int position) {
super.onPageSelected(position);
currentPosition = position;
}
});
}
private class DataAdapter extends RecyclerView.Adapter<DataAdapter.ViewHolder> {
private List<DataItem> dataItems = new ArrayList<>();
public void setData(List<DataItem> dataItems) {
this.dataItems = dataItems;
notifyDataSetChanged();
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_data, parent, false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
DataItem dataItem = dataItems.get(position);
holder.bind(dataItem);
}
@Override
public int getItemCount() {
return dataItems.size();
}
class ViewHolder extends RecyclerView.ViewHolder {
private TextView admissionFeeTextView;
private TextView parkPriceTextView;
private TextView timeTextView;
private ImageView imageView;
ViewHolder(@NonNull View itemView) {
super(itemView);
admissionFeeTextView = itemView.findViewById(R.id.admissionFeesTextView);
parkPriceTextView = itemView.findViewById(R.id.parkPriceTextView);
timeTextView = itemView.findViewById(R.id.timeTextView);
imageView = itemView.findViewById(R.id.imageView);
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int position = getAdapterPosition();
if (position != RecyclerView.NO_POSITION) {
// 클릭한 아이템의 이미지를 표시
DataItem clickedItem = dataItems.get(position);
clickedItem.setClicked(!clickedItem.isClicked());
// 해당 위치의 항목을 갱신
notifyItemChanged(position);
}
}
});
}
void bind(DataItem dataItem) {
admissionFeeTextView.setText(dataItem.getAdmissionFee());
parkPriceTextView.setText(dataItem.getParkPrice());
timeTextView.setText(dataItem.getTime());
// 클릭 여부에 따라 이미지 가시성을 설정
if (dataItem.isClicked()) {
Glide.with(itemView.getContext()).load(dataItem.getImageUrl()).into(imageView);
imageView.setVisibility(View.VISIBLE);
} else {
imageView.setVisibility(View.GONE);
}
}
}
}
}