androidcolorstextviewdynamic-ui

Change the color in dynamic textview for every click in android


I have created a textview dynamically in android. When i clicked the textview the color changes from white to orange, but what i want is when i clicked another textview, the other textview that has been changed to orange will change back to white. This is the code to create the textview:

for (int i = 1; i <= n; i++) {

        final TextView mPageNumber = new TextView(getActivity());
        mPageNumber.setText("" + i);
        mPageNumber.setId(Integer.parseInt(String.valueOf(i)));
        mPageNumber.setTextColor(getResources().getColor(R.color.colorWhite));
        mPageNumber.setPadding(60,30,60,30);
        final int id_ = mPageNumber.getId();
        LinearLayout layout = (LinearLayout) getView().findViewById(R.id.pagination);
        layout.setBackgroundResource(R.color.colorPrimary);
        layout.addView(mPageNumber);

OnClickListener

mPageNumber.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if (toastMessage!= null) {
                    toastMessage.cancel();
                }

                toastMessage = Toast.makeText(getActivity().getApplicationContext(), "Button with id =" + id_ +
                        " is clicked",Toast.LENGTH_SHORT);
                current = id_;
                toastMessage.show(); mPageNumber.setTextColor(getResources().getColor(R.color.colorOrange));

Solution

  • You can iterate through all the child in the layout and set the color as white and then the selected color as orange like this in below example.

    LinearLayout layout;
    private void setAllTextColorAsWhite() {
        if(layout == null) {
            return;
        }
    
        int childCount = layout.getChildCount();
    
        for (int i = 0; i < childCount; i++) {
            TextView textView = (TextView) layout.getChildAt(i);
            textView.setTextColor(getResources().getColor(R.color.white));
        }
    }
    
    public void setTextViews() {
        layout = (LinearLayout) getView().findViewById(R.id.pagination);
    
        layout.removeAllViews();
    
        for (int i = 1; i <= n; i++) {
    
            final TextView mPageNumber = new TextView(getActivity());
            mPageNumber.setText("" + i);
            mPageNumber.setId(Integer.parseInt(String.valueOf(i)));
            mPageNumber.setTextColor(getResources().getColor(R.color.colorWhite));
            mPageNumber.setPadding(60, 30, 60, 30);
            final int id_ = mPageNumber.getId();
    
            layout.setBackgroundResource(R.color.colorPrimary);
            layout.addView(mPageNumber);
    
            mPageNumber.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    if (toastMessage!= null) {
                        toastMessage.cancel();
                    }
    
                    toastMessage = Toast.makeText(getActivity().getApplicationContext(), "Button with id =" + id_ +
                            " is clicked",Toast.LENGTH_SHORT);
                    current = id_;
                    toastMessage.show();
    
                    setAllTextColorAsWhite();
    
                    mPageNumber.setTextColor(getResources().getColor(R.color.colorOrange));
                }
            });
        }
    }