Search code examples
javaandroidbaseadapterlayout-inflater

How to remove dynamically a row of table using BaseAdapter when a column is empty?


my question is above. My code is below. As you can see, some of the data is empty e.g. "20:11", "", "11:25" ... I would like that the row from layout inflate has been immediately removed when a field is empty or if there is a better solution has dynamically created when a field is non empty.

public class Zlecenia extends Activity {

    ListView listview;

    ArrayList<ListData> myList = new ArrayList<>();

    String[] strefa = new String[]{
            "Jerozolimskie 20/22", "Title 2", "Title 3", "Title 4",
            "Title 5", "Title 6", "Title 7", "Title 8"
    };
    String[] adres = new String[]{
            "Desc 1", "Desc 2", "Desc 3", "Desc 4",
            "Desc 5", "Desc 6", "Desc 7", "Desc 8"
    };
    String[] data = new String[]{
            "20:11", "", "11:25", "", "15:11", "11:25", "15:11", "11:25"
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.zlecenia);

        listview = (ListView) findViewById(R.id.listView);

        for (int i = 0; i < strefa.length; i++) {
            ListData ld = new ListData();
            ld.setStrefa(strefa[i]);
            ld.setAdres(adres[i]);
            ld.setData(data[i]);
            myList.add(ld);
        }

        listview.setAdapter(new MyBaseAdapter(this, myList));

    }

}

And BaseAdapter:

public class MyBaseAdapter extends BaseAdapter {

// Other methods of extends BaseAdapter
...

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

        if (convertView == null) {
            convertView = inflater.inflate(R.layout.zlecenia_lista, parent, false);
            mViewHolder = new MyViewHolder(convertView);
            convertView.setTag(mViewHolder);
        } else {
            mViewHolder = (MyViewHolder) convertView.getTag();
        }

        ListData currentListData = getItem(position);

        mViewHolder.strefa.setText(currentListData.getStrefa());
        mViewHolder.adres.setText(currentListData.getAdres());
        mViewHolder.data.setText(currentListData.getData());

        return convertView;
    }

    private class MyViewHolder {
        TextView strefa, adres, data;

        public MyViewHolder(View item) {
            strefa = (TextView) item.findViewById(R.id.strefa);
            adres = (TextView) item.findViewById(R.id.adres);
            data = (TextView) item.findViewById(R.id.data);
        }
    }

}

Solution

  • so you want all the row (item) of a list to be removed (hide) if data equal ""

    here what i propose :

    public class MyBaseAdapter extends BaseAdapter {
    
    // Other methods of extends BaseAdapter
    ...
    
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            MyViewHolder mViewHolder;
    
            if (convertView == null) {
                convertView = inflater.inflate(R.layout.zlecenia_lista, parent, false);
                mViewHolder = new MyViewHolder(convertView);
                convertView.setTag(mViewHolder);
            } else {
                mViewHolder = (MyViewHolder) convertView.getTag();
            }
    
            ListData currentListData = getItem(position);
    
            mViewHolder.strefa.setText(currentListData.getStrefa());
            mViewHolder.adres.setText(currentListData.getAdres());
            mViewHolder.data.setText(currentListData.getData());
            // try this
            if(currentListData.getData().equals("")) {
                  convertView.setVisibility(View.GONE) // all the row is hided
            }else {
                  convertView.setVisibility(View.VISIBLE) // display the row
            }
            return convertView;
        }
    
        private class MyViewHolder {
            TextView strefa, adres, data;
    
            public MyViewHolder(View item) {
                strefa = (TextView) item.findViewById(R.id.strefa);
                adres = (TextView) item.findViewById(R.id.adres);
                data = (TextView) item.findViewById(R.id.data);
            }
        }
    
    }
    

    hope that was helpful, if any trouble leave a comment !

    good luck !