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());
}
}
}
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) {
}
private
void
openLink(String link) {
Intent intent =
new
Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse(link));
startActivity(intent);
}
}