버튼2 추가한 소스코드를 올려 드릴게요.
public class ItemData {
private int image;
private boolean checked = false;
@Nullable private String link = null;
public ItemData(int image) {
this.image = image;
}
public ItemData(int image, @NonNull String link) {
this.image = image;
this.link = link;
}
public int getImage() {
return image;
}
@Nullable
public String getLink() {
return link;
}
public void setChecked(boolean checked) {
this.checked = checked;
}
public void toggleChecked() {
this.checked = !this.checked;
}
public int getDrawableId() {
return checked ? R.drawable.ic_sc_btn1 : R.drawable.ic_sc_btn;
}
}
public class MyRecyclerAdapter extends RecyclerView.Adapter<MyRecyclerAdapter.ViewHolder> {
private final List<ItemData> itemData;
public MyRecyclerAdapter(List<ItemData> itemData) {
this.itemData = itemData;
}
public interface MyRecyclerViewClickListener {
void onItemClicked(int position);
void onImageViewClicked(int position);
void onLinkClick(@Nullable String link);
}
private MyRecyclerViewClickListener mListener;
public void setOnClickListener(MyRecyclerViewClickListener listener) {
this.mListener = listener;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_list, parent, false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull final ViewHolder holder, int position) {
final ItemData item = getItem(position);
holder.bind(item);
holder.button.setOnClickListener(v -> {
if (mListener != null)
mListener.onItemClicked(holder.getAdapterPosition());
});
holder.linkBtn.setOnClickListener(v -> {
if (mListener != null)
mListener.onLinkClick(item.getLink());
});
holder.itemView.setOnClickListener(v -> {
if (mListener != null)
mListener.onItemClicked(holder.getAdapterPosition());
});
holder.image.setOnClickListener(v -> {
if (mListener != null)
mListener.onImageViewClicked(holder.getAdapterPosition());
});
}
@Override
public int getItemCount() {
return itemData.size();
}
private ItemData getItem(int position) {
return itemData.get(position);
}
public static class ViewHolder extends RecyclerView.ViewHolder {
Button button, linkBtn;
ImageView image;
public ViewHolder(@NonNull View itemView) {
super(itemView);
image = itemView.findViewById(R.id.image);
button = itemView.findViewById(R.id.rebtn);
linkBtn = itemView.findViewById(R.id.linkBtn);
}
public void bind(ItemData item) {
image.setImageResource(item.getImage());
button.setBackgroundResource(item.getDrawableId());
// 필요시 추가
// linkBtn.setEnabled(item.canOpenLink());
}
}
}
public class MainActivity extends AppCompatActivity implements MyRecyclerAdapter.MyRecyclerViewClickListener {
private List<ItemData> dataList = new ArrayList<>();
private MyRecyclerAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setupViews();
}
private void setupViews() {
RecyclerView recyclerView = findViewById(R.id.recyclerView);
initialiseAdapterDataSet();
adapter = new MyRecyclerAdapter(dataList);
recyclerView.setAdapter(adapter);
adapter.setOnClickListener(this);
}
private void initialiseAdapterDataSet() {
List<ItemData> initialData = getItems();
dataList.clear();
dataList.add(initialData.get(0));
dataList.add(initialData.get(1));
}
private List<ItemData> getItems() {
return Arrays.asList(new ItemData(R.drawable.ic_1), new ItemData(R.drawable.ic_2, "https://youtu.be/"));
}
public void removeItem(int position) {
dataList.remove(position);
adapter.notifyItemRemoved(position);
}
@Override
public void onItemClicked(int position) {
dataList.get(position).toggleChecked();
adapter.notifyItemChanged(position);
}
@Override
public void onLinkClick(@Nullable String link) {
boolean isNullOrEmpty = link == null || link.isEmpty();
if (isNullOrEmpty) return;
if (!URLUtil.isValidUrl(link)) {
Toast.makeText(this, "올바른 링크가 아닙니다.", Toast.LENGTH_SHORT).show();
return;
}
openLink(link);
}
@Override
public void onImageViewClicked(int position) {
}
// TODO : 재사용을 위해 유틸클래스에 옮길 것.
private void openLink(String link) {
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse(link));
startActivity(intent);
}
}