How to show the image button only on certain lines

I have a ListView with a custom adapter. I want to set ImageButton visibility on each line based on the condition in my list. However, the strings are not what I assume.

In the example below, I have a class called ColorInfowith a property count. Whenever the counter is greater than 0, I want to show an image. For dummy data, I filled the array with 20 elements ColorInfowith each even element having a counter greater than 0. However, when I run the application, I do not see ImageButtonin the alternative lines

The following is a complete example:

Demoactivity

public class DemoActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        ColorInfo[] clr= new ColorInfo[20];

        for(int i=0;i<20;i++){
            ColorInfo clrInfo = new ColorInfo();
            if (i%2 == 0) {
                clrInfo.count = 5;
            }
            clr[i] = clrInfo;
        }
        ((ListView)findViewById(R.id.list)).setAdapter(new MyAdapter(this, 0, clr));
    }

    private  class MyAdapter extends ArrayAdapter<ColorInfo>  {
        ViewHolder holder;
        LayoutInflater inflater;
        public MyAdapter(Context context, int textViewResourceId,ColorInfo[] objects) {
            super(context, textViewResourceId, objects);
            inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        }
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            View itemView = convertView;

            final ColorInfo item = getItem(position);

            if(itemView == null){
                itemView = inflater.inflate(R.layout.row, null);
                holder = new ViewHolder();
                holder.editButton = (ImageButton) itemView.findViewById(R.id.some_button);
                itemView.setTag(holder);
            }
            else
                holder = (ViewHolder)itemView.getTag();

            if (item.count>0)
                holder.editButton.setVisibility(View.VISIBLE);

            return itemView;
        }
        private  class ViewHolder{
            ImageButton editButton;
        }
    }
    private static class ColorInfo{
        int count = 0;
    }
}

main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <ListView
        android:id="@+id/list"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" >
    </ListView>

</LinearLayout>

row.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <TextView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:text="test"/>

    <ImageButton
        android:id="@+id/some_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="#000000"
        android:visibility="gone"
        android:src="@drawable/ic_some_img"/>
</LinearLayout>

Update

, ArrayAdapter, , else.

+4
1

, :

    @Override
                public View getView(int position, View convertView, ViewGroup parent) {

                    View vi = convertView;

                    if (vi == null)
                        vi = inflater.inflate(R.layout.row, null);

ImageView iv = (ImageView)vi.findViewById(R.id.someImageButton);

                    if (position == 0) {



                        iv.setVisibility(View.VISIBLE);

                    }
                    if (position == 1) {

                        //Something

                    }
                    if (position == 2) {

                        //Something

                    }
                    if (position == 3) {



                        iv.setVisibility(View.VISIBLE);

                    }

                    return vi;
                }
            }

, , .

0

Source: https://habr.com/ru/post/1531692/


All Articles