I wanna change checkedTextView's boolean state in activity when some event occurs in adapter(Maybe RecyclerView). I thought the way using getter and setter first, but that's not good idea. So I thought listener. Is there listener can get event in adapter?
Here is my code. I didn't upload MainActivity's code cuz it is completed.
OptionActivity.java
package org.techtown.cryptoview;
import android.content.Intent;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.view.View;
import android.widget.CheckedTextView;
import java.util.ArrayList;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
public class OptionActivity extends AppCompatActivity {
OptionAdapter optionAdapter = new OptionAdapter();
RecyclerView recyclerView;
CheckedTextView checkedTextView;
// This is SelectAll checkedTextView. I have to change this.
ArrayList<CoinInfoCoinone> coinInfosCoinone = new ArrayList<CoinInfoCoinone>();
ArrayList<CoinInfoBithumb> coinInfosBithumb = new ArrayList<CoinInfoBithumb>();
String coinoneAddress = "https://api.coinone.co.kr/ticker?currency=all";
String bithumbAddress = "https://api.bithumb.com/public/ticker/ALL_KRW";
String URL = coinoneAddress;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_option);
checkedTextView = findViewById(R.id.checkedTextView);
Intent intent = getIntent();
URL = intent.getExtras().getString("URL");
checkedTextView.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
if (((CheckedTextView) view).isChecked()) {
checkedTextView.toggle();
}
else {
checkedTextView.toggle();
}
optionAdapter.selectAll(checkedTextView.isChecked());
optionAdapter.notifyDataSetChanged();
}
});
if (URL.equals(coinoneAddress))
coinInfosCoinone = (ArrayList<CoinInfoCoinone>) intent.getSerializableExtra("coinInfosCoinone");
if (URL.equals(bithumbAddress))
coinInfosBithumb = (ArrayList<CoinInfoBithumb>) intent.getSerializableExtra("coinInfosBithumb");
setData();
init();
}
public void setData() {
optionAdapter.setURL(URL);
if (URL.equals(coinoneAddress)) {
for (int i = 0; i < coinInfosCoinone.size(); i++) {
if (!coinInfosCoinone.get(i).getCoinViewCheck())
checkedTextView.setChecked(false);
if (i == coinInfosCoinone.size() - 1 && coinInfosCoinone.get(i).getCoinViewCheck())
checkedTextView.setChecked(true);
optionAdapter.addItemCoinone(coinInfosCoinone.get(i));
}
}
if (URL.equals(bithumbAddress)) {
for (int i = 0; i < coinInfosBithumb.size(); i++) {
if (!coinInfosBithumb.get(i).getCoinViewCheck())
checkedTextView.setChecked(false);
if (i == coinInfosBithumb.size() - 1 && coinInfosBithumb.get(i).getCoinViewCheck())
checkedTextView.setChecked(true);
optionAdapter.addItemBithumb(coinInfosBithumb.get(i));
}
}
optionAdapter.notifyDataSetChanged();
}
public void init() {
recyclerView = findViewById(R.id.recyclerView);
LinearLayoutManager layoutManager = new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false);
recyclerView.setLayoutManager(layoutManager);
if (URL.equals(coinoneAddress))
getSupportActionBar().setBackgroundDrawable(new ColorDrawable(0xFF0079FE));
if (URL.equals(bithumbAddress))
getSupportActionBar().setBackgroundDrawable(new ColorDrawable(0xFFF37321));
recyclerView.setAdapter(optionAdapter);
}
}
OptionAdapter.java
package org.techtown.cryptoview;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CheckedTextView;
import android.widget.ImageView;
import android.widget.Toast;
import java.util.ArrayList;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
public class OptionAdapter extends RecyclerView.Adapter<OptionAdapter.ViewHolder> {
ArrayList<CoinInfoCoinone> coinInfosCoinone = new ArrayList<CoinInfoCoinone>();
ArrayList<CoinInfoBithumb> coinInfosBithumb = new ArrayList<CoinInfoBithumb>();
String coinoneAddress = "https://api.coinone.co.kr/ticker?currency=all";
String bithumbAddress = "https://api.bithumb.com/public/ticker/ALL_KRW";
String URL = coinoneAddress;
public static class ViewHolder extends RecyclerView.ViewHolder {
ImageView imageView;
CheckedTextView checkedTextView;
public ViewHolder(View itemView) {
super(itemView);
imageView = itemView.findViewById(R.id.imageView);
checkedTextView = itemView.findViewById(R.id.checkedTextView);
}
public void setItemCoinone(CoinInfoCoinone coinInfo) {
imageView.setImageResource(coinInfo.getCoinImageIndex());
checkedTextView.setText(coinInfo.getCoinName().currency.toUpperCase() + " / " + coinInfo.getCoinNameKorean());
checkedTextView.setChecked(coinInfo.getCoinViewCheck());
}
public void setItemBithumb(CoinInfoBithumb coinInfo) {
imageView.setImageResource(coinInfo.getCoinImageIndex());
checkedTextView.setText(coinInfo.getCoinNameKorean());
checkedTextView.setChecked(coinInfo.getCoinViewCheck());
}
}
public OptionAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int viewType) {
LayoutInflater inflater = LayoutInflater.from(viewGroup.getContext());
View itemView = inflater.inflate(R.layout.option_item, viewGroup, false);
return new OptionAdapter.ViewHolder(itemView);
}
public void onBindViewHolder(ViewHolder viewHolder, int position) {
final int finalPosition = position;
final boolean isChecked = viewHolder.checkedTextView.isChecked();
// I want to change OptionActivity's selectAll checkedTextView if each item's checkedTextView's boolean state is changed to false.
if (URL.equals(coinoneAddress)) {
viewHolder.setItemCoinone(coinInfosCoinone.get(position));
viewHolder.checkedTextView.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
CheckedTextView checkedTextView = (CheckedTextView) view;
if (isChecked) {
checkedTextView.toggle();
coinInfosCoinone.get(finalPosition).setCoinViewCheck(true);
}
else {
checkedTextView.toggle();
coinInfosCoinone.get(finalPosition).setCoinViewCheck(false);
}
}
});
}
if (URL.equals(bithumbAddress)) {
viewHolder.setItemBithumb(coinInfosBithumb.get(position));
viewHolder.checkedTextView.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
CheckedTextView checkedTextView = (CheckedTextView) view;
if (isChecked) {
checkedTextView.toggle();
coinInfosBithumb.get(finalPosition).setCoinViewCheck(true);
}
else {
checkedTextView.toggle();
coinInfosBithumb.get(finalPosition).setCoinViewCheck(false);
}
}
});
}
}
public void addItemCoinone(CoinInfoCoinone coinInfo) {
coinInfosCoinone.add(coinInfo);
}
public void addItemBithumb(CoinInfoBithumb coinInfo) {
coinInfosBithumb.add(coinInfo);
}
public int getItemCount() {
if (URL.equals(coinoneAddress))
return coinInfosCoinone.size();
else
return coinInfosBithumb.size();
}
public void setURL(String URL) {
this.URL = URL;
}
public void selectAll(boolean checkAll) {
if (URL.equals(coinoneAddress)) {
if (checkAll) {
for (int i = 0; i < coinInfosCoinone.size(); i++) {
coinInfosCoinone.get(i).setCoinViewCheck(true);
}
}
else {
for (int i = 0; i < coinInfosCoinone.size(); i++) {
coinInfosCoinone.get(i).setCoinViewCheck(false);
}
}
}
if (URL.equals(bithumbAddress)) {
if (checkAll) {
for (int i = 0; i < coinInfosBithumb.size(); i++) {
coinInfosBithumb.get(i).setCoinViewCheck(true);
}
}
else {
for (int i = 0; i < coinInfosBithumb.size(); i++) {
coinInfosBithumb.get(i).setCoinViewCheck(false);
}
}
}
}
public ArrayList<CoinInfoCoinone> getCoinInfosCoinone() {
return coinInfosCoinone;
}
public ArrayList<CoinInfoBithumb> getCoinInfosBithumb() {
return coinInfosBithumb;
}
}