0

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;
    }
}
OverEasy
  • 49
  • 8
  • Um... I think not. In my situation, I made activity made of RecyclerView having item includes checkedTextView and selectAll checkedTextView. I made selectAll function but there a problem. if some item's checkedTextView changed to false in 'Select All' state, then selectAll checkedTextView have to change to false too. But I can't make it. So I asked this. – OverEasy Mar 18 '20 at 10:11
  • I mean, I don't know how to change checkedTextView's boolean state in activity by event of adapter. – OverEasy Mar 18 '20 at 10:14
  • Post your code. – shb Mar 18 '20 at 10:16
  • Now posted code. – OverEasy Mar 18 '20 at 11:09

0 Answers0