Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

setVisibility not working

This is my layout:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/day_frame"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginLeft="4dip"
    android:orientation="vertical" >

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:orientation="vertical"
        android:padding="2dip" >

        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginBottom="1dip" >

            <ImageView
                android:id="@+id/imageView1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginRight="1dip"
                android:src="@drawable/marca_bike_event" />

            <ImageView
                android:id="@+id/imageView2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginRight="1dip"
                android:src="@drawable/marca_bike_event" />

            <ImageView
                android:id="@+id/imageView3"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginRight="1dip"
                android:src="@drawable/marca_bike_event" />

            <ImageView
                android:id="@+id/imageView4"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginRight="1dip"
                android:src="@drawable/marca_bike_event" />

            <ImageView
                android:id="@+id/imageView5"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginRight="1dip"
                android:src="@drawable/marca_bike_event" />

            <ImageView
                android:id="@+id/imageView6"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src="@drawable/marca_bike_event" />
        </LinearLayout>

        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginBottom="1dip" >

            <ImageView
                android:id="@+id/imageView7"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginRight="1dip"
                android:src="@drawable/marca_bike_event" />

            <ImageView
                android:id="@+id/imageView8"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginRight="1dip"
                android:src="@drawable/marca_bike_event" />

            <ImageView
                android:id="@+id/imageView9"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginRight="1dip"
                android:src="@drawable/marca_bike_event" />

            <ImageView
                android:id="@+id/imageView10"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginRight="1dip"
                android:src="@drawable/marca_bike_event" />

            <ImageView
                android:id="@+id/imageView11"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginRight="1dip"
                android:src="@drawable/marca_bike_event" />

            <ImageView
                android:id="@+id/imageView12"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src="@drawable/marca_bike_event" />
        </LinearLayout>

        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" >

            <ImageView
                android:id="@+id/imageView13"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginRight="1dip"
                android:src="@drawable/marca_bike_event" />

            <ImageView
                android:id="@+id/imageView14"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginRight="1dip"
                android:src="@drawable/marca_bike_event" />

            <ImageView
                android:id="@+id/imageView15"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginRight="1dip"
                android:src="@drawable/marca_bike_event" />

            <ImageView
                android:id="@+id/imageView16"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginRight="1dip"
                android:src="@drawable/marca_bike_event" />

            <ImageView
                android:id="@+id/imageView17"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginRight="1dip"
                android:src="@drawable/marca_bike_event" />

            <ImageView
                android:id="@+id/imageView18"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src="@drawable/marca_bike_event" />
        </LinearLayout>

        <TextView
            android:id="@+id/day_number"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="2dip"
            android:gravity="right|bottom"
            android:textSize="18sp"
            android:textStyle="bold" />
    </LinearLayout>

</RelativeLayout>

and this is my custom view

import java.util.Calendar;

public class DayView extends LinearLayout {

    private final boolean belongsToMonth;
    private final TextView numberView;
    private int racesNum = 0;
    private final ImageView iv1, iv2, iv3, iv4, iv5, iv6, iv7, iv8, iv9, iv10,
    iv11, iv12, iv13, iv14, iv15, iv16, iv17, iv18;

    public DayView(final Context context, final Calendar moving,
            final SingleCalendar calendar) {
        super(context);
        View.inflate(context, R.layout.calendar_week_day, this);
        iv1 = (ImageView) findViewById(R.id.imageView1);
        iv2 = (ImageView) findViewById(R.id.imageView2);
        iv3 = (ImageView) findViewById(R.id.imageView3);
        iv4 = (ImageView) findViewById(R.id.imageView4);
        iv5 = (ImageView) findViewById(R.id.imageView5);
        iv6 = (ImageView) findViewById(R.id.imageView6);
        iv7 = (ImageView) findViewById(R.id.imageView7);
        iv8 = (ImageView) findViewById(R.id.imageView8);
        iv9 = (ImageView) findViewById(R.id.imageView9);
        iv10 = (ImageView) findViewById(R.id.imageView10);
        iv11 = (ImageView) findViewById(R.id.imageView11);
        iv12 = (ImageView) findViewById(R.id.imageView12);
        iv13 = (ImageView) findViewById(R.id.imageView13);
        iv14 = (ImageView) findViewById(R.id.imageView14);
        iv15 = (ImageView) findViewById(R.id.imageView15);
        iv16 = (ImageView) findViewById(R.id.imageView16);
        iv17 = (ImageView) findViewById(R.id.imageView17);
        iv18 = (ImageView) findViewById(R.id.imageView18);
        final ImageView[] views = new ImageView[] { iv1, iv2, iv3, iv4, iv5,
                iv6, iv7, iv8, iv9, iv10, iv11, iv12, iv13, iv14, iv15, iv16,
                iv17, iv18 };
        for (final ImageView v : views) {
            v.setVisibility(View.INVISIBLE);
        }

        numberView = (TextView) findViewById(R.id.day_number);
        numberView.setText(Integer.toString(moving.get(Calendar.DAY_OF_MONTH)));
        setTag(moving.clone());
        belongsToMonth = (moving.get(Calendar.MONTH) == calendar.current
                .get(Calendar.MONTH));
        final Resources res = getResources();
        if (!belongsToMonth) {
            numberView.setTextColor(res
                    .getColor(R.color.calendar_unbelonging_dayview_text));
            setBackgroundResource(R.drawable.unbelonging_dayview);
        } else {
            numberView.setTextColor(res
                    .getColor(R.color.calendar_belonging_dayview_text));
            setBackgroundResource((DateParseUtils.areEqualDays(moving,
                    calendar.today)) ? R.drawable.selected_dayview
                            : R.drawable.unselected_dayview);
        }
    }

    protected void onMeasure(final int widthMeasureSpec,

    public boolean belongsToMonth() {

    public Calendar getCalendar() {

    public void addRace(final ParseObject carrera) {
        final ImageView[] views = new ImageView[] { iv1, iv2, iv3, iv4, iv5,
                iv6, iv7, iv8, iv9, iv10, iv11, iv12, iv13, iv14, iv15, iv16,
                iv17, iv18 };


        if (racesNum < views.length) {
            final ImageView iv = views[racesNum];
            final int id = getRaceId(carrera);
            iv.setImageDrawable(getContext().getResources().getDrawable(id));
            for (int i = 0; i < views.length; i++) {
                final ImageView iv2 = views[i];
                if (i <= racesNum) {
                    iv2.setVisibility(View.VISIBLE);
                } else {
                    iv2.setVisibility(View.INVISIBLE);
                }
            }
            racesNum++;
        }

    }

    private int getRaceId(final ParseObject carrera) {

        final String disciplina = carrera.getString("disciplinaId");
        if (disciplina.equals(SettingsActivity.ID_BIKE_EVENT)) {
            return R.drawable.marca_bike_event;
        } else if (disciplina.equals(SettingsActivity.ID_BMX)) {
            return R.drawable.marca_bmx;
        } else if (disciplina.equals(SettingsActivity.ID_ENDURO)) {
            return R.drawable.marca_enduro;
        } else if (disciplina.equals(SettingsActivity.ID_FREESTYLE)) {
            return R.drawable.marca_freestyle;
        } else if (disciplina.equals(SettingsActivity.ID_MOTO_GP)) {
            return R.drawable.marca_moto_gp;
        } else if (disciplina.equals(SettingsActivity.ID_MOTOCROSS)) {
            return R.drawable.marca_motocross;
        } else if (disciplina.equals(SettingsActivity.ID_MOTORBIKE_RALLY)) {
            return R.drawable.marca_mc_rally;
        } else if (disciplina.equals(SettingsActivity.ID_MTB_4X)) {
            return R.drawable.marca_mtb_4x;
        } else if (disciplina.equals(SettingsActivity.ID_MTB_DH)) {
            return R.drawable.marca_mtb_dh;
        } else if (disciplina.equals(SettingsActivity.ID_MTB_ENDURO)) {
            return R.drawable.marca_mtb_enduro;
        } else if (disciplina.equals(SettingsActivity.ID_QUADCROSS)) {
            return R.drawable.marca_quad_cross;
        } else if (disciplina.equals(SettingsActivity.ID_SUPERBIKE)) {
            return R.drawable.marca_superbike;
        } else if (disciplina.equals(SettingsActivity.ID_SUPERMOTO)) {
            return R.drawable.marca_supermoto;
        } else if (disciplina.equals(SettingsActivity.ID_TRIAL)) {
            return R.drawable.marca_trial;
        } else if (disciplina.equals(SettingsActivity.ID_URBAN_DH)) {
            return R.drawable.marca_urban_dh;
        } else if (disciplina.equals(SettingsActivity.ID_XC_RALLIES)) {
            return R.drawable.marca_xc_rallies;
        }
        return R.drawable.marca_other_event;
    }

}

addRace is getting called from the OnPostExecute method of an AsyncTask. However, it won't make any ImageViews visible. I've debugged it putting a breakpoint on the setVisibility line, and it actually calls setVisibility on the main thread, but it just does not work. Trying to change the ImageView drawable won't work either.

I've tried setting its visibility and changing the drawable on the constructor, and it works. It just seems like the setVisibility method is just doing nothing.

Am I missing something?

like image 393
Charlie-Blake Avatar asked Mar 17 '26 04:03

Charlie-Blake


1 Answers

Ok, solved it.

My DayViews are dynamically created on an ArrayAdapter<Calendar>. All I had to do was do all the view manipulation in the getView method of the ArrayAdapter and then call adapter.notifyDataSetChanged() instead of trying to modify them directly.

Also, I had to use ViewHolder pattern in order to get the modifications done right.

like image 130
Charlie-Blake Avatar answered Mar 20 '26 09:03

Charlie-Blake



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!