Реплицировать фон в последней строке GridView

#android #android-layout #android-gridview

#Android #android-макет #android-gridview

Вопрос:

У меня есть GridView с четырьмя столбцами, к каждому элементу я добавил свой библиотечный фон (в стиле полки), но проблема в том, что в последней строке, если их меньше четырех, фон отображается только до последнего элемента, мне это нужно, чтобы заполнить строку, как я могусделать это?

Это мой фактический код:

 public class LibraryGridView extends GridView {
    private LibraryActivity activity;

    public LibraryGridView(LibraryActivity activity) {
        super(activity);
        setBackgroundColor(Color.rgb(223, 223, 223));

        this.activity = activity;

        setNumColumns(activity.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE ? 6 : 4);
    }

    public void setData(List<LibraryItem> books) {
        setAdapter(new BookAdapter(getContext(), books));
    }

    private class BookAdapter extends ArrayAdapter<LibraryItem> {
        private List<LibraryItem> books;

        public BookAdapter(Context context, List<LibraryItem> books) {
            super(context, 0, books);
            this.books = books;
        }

        public View getView(int position, View convertView, ViewGroup parent) {
            BookGridView view = null;

            if (convertView == null)
                view = new BookGridView(activity);
            else
                view = (BookGridView) convertView;

            view.setBackgroundResource(R.drawable.background_grid);
            view.loadStateFrom(getItem(position));

            return view;
        }

        public LibraryItem getItem(int id) {
            return books.get(id);
        }

        public int getCount() {
            return books.size();
        }

        public long getItemId(int position) {
            return position;
        }
    }
}
  

Комментарии:

1. Для цели try вы можете добавить пустой элемент в последнюю из книг private List<LibraryItem>, а затем передать его в адаптер массива? таким образом, ваш список содержит n 1 элемент. попробуйте и дайте мне знать, что произойдет?

2. Ну, я решил это так, я добавил пустые значения, а также вернул null для GetItem, и единственное, что нарисовано, это фон. Ty

3. Поэтому я думаю, что вы всегда должны добавлять элемент в список, кратный 4, потому что у вас есть 4 столбца, и он работает. Если вы не возражаете, я напишу комментарий about в качестве ответа, чтобы вы приняли его, и это полезно для вас и других пользователей. Спасибо.

Ответ №1:

Я думаю, вам нужно add empty item at the last of private List<LibraryItem> books in multiple of 4 , а затем передать его адаптеру массива, чтобы ваш список содержал (n% 4 = 0) элемент.

Здесь используется 4, потому что в вашем gridview есть 4 столбца.

Спасибо.