Не удалось создать необходимый макет xml (Android) - PullRequest
0 голосов
/ 03 мая 2018

Я занимаюсь разработкой приложения для бронирования автобусов. В котором я хочу расположение мест, как указано ниже.

Как это

И я получаю это

В каждом ряду будет 4 места. Как оставить 1 пустой ряд между 2-м и 3-м столбцом, а в последнем ряду должны отображаться все 5 мест.

Мой макет не отформатирован как ineed.

SeatSelection Activity

public class SeatSelection extends AppCompatActivity implements AdapterView.OnItemClickListener{

RecyclerView recyclerView;
RecyclerView.Adapter adapter;
ArrayList<Item> gridArray = new ArrayList<Item>();
TextView txtSeatNo;
ImageView imageView;
public Bitmap seatIcon;
public Bitmap seatSelect;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_seat_selection);

    seatIcon = BitmapFactory.decodeResource(this.getResources(), R.drawable.seat_layout_screen_nor_avl);
    seatSelect = BitmapFactory.decodeResource(this.getResources(), R.drawable.seat_layout_screen_nor_std);

    recyclerView = (RecyclerView) findViewById(R.id.recycler);
    RecyclerView.LayoutManager layoutManager = new GridLayoutManager(this, 5);
    recyclerView.setLayoutManager(layoutManager);
    adapter = new SeatAdapter();
    recyclerView.setAdapter(adapter);


}

@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

    Item item = gridArray.get(position);
    Bitmap seatcompare = item.getImage();
    if (seatcompare == seatIcon)
    {
        seatSelected(position);
    }
    else
    {
        seatDeselected(position);

    }
}

SeatAdapter seatAdapter;
public void seatSelected(int pos)
{
    gridArray.remove(pos);
    gridArray.add(pos, new Item(seatSelect, "Selected"));
    seatAdapter.notifyDataSetChanged();
}

public void seatDeselected(int pos)
{
    gridArray.remove(pos);
    int i = pos + 1;
    gridArray.add(pos, new Item(seatIcon, "Seat" + i));
    seatAdapter.notifyDataSetChanged();
}
public class SeatAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>{

    class ViewHolderOriginal extends RecyclerView.ViewHolder{

        ImageView imageView;
        TextView textView;
        ViewHolderOriginal(View itemView) {
            super(itemView);
            imageView= (ImageView) itemView.findViewById(R.id.item_image);
            textView = (TextView) itemView.findViewById(R.id.item_text);
        }
    }

    class ViewHolderBlank extends RecyclerView.ViewHolder{
        ViewHolderBlank(View itemView) {
            super(itemView);

        }

    }
    // 0= Original view 1= Blank View
    @Override
    public int getItemViewType(int position) {
        if((getItemCount()-(position-1))<5)
            return 0;
        else
            return position % 5 == 2 ? 1 : 0;
    }

    @Override
    public int getItemCount() {
        return 60;
    }

    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        LayoutInflater inflater = (LayoutInflater) parent.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        if (viewType == 1)
            return new ViewHolderBlank(inflater.inflate(R.layout.item_blank, parent, false));
        else
            return new ViewHolderOriginal(inflater.inflate(R.layout.seatrow_grid, parent, false));
    }

    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) {
        if (holder instanceof ViewHolderBlank) {

        } else if (holder instanceof ViewHolderOriginal) {

        }
    }

}
}

Пункт

public class Item
 {
public Bitmap image;
public String title;
public boolean isSelected;


public boolean isSelected()
{
    return isSelected;
}


public void setSelected(boolean isSelected)
{
    this.isSelected = isSelected;
}


public Item(Bitmap image, String title)
{
    super();
    this.image = image;
    this.title = title;
}


public Bitmap getImage()
{
    return image;
}

public void setImage(Bitmap image)
{
    this.image = image;
}

public String getTitle()
{
    return title;
}

public void setTitle(String title)
{
    this.title = title;
}

}

1 Ответ

0 голосов
/ 03 мая 2018

Простая логика - это добавление значения черного для среднего столбца.

1) Как найти средний столбец для GridLayoutManger, где номер столбца равен 5.

if (position % 5 == 2) {...}

условие верно для вашего среднего столбца.

2) Используйте getItemViewType для идентификации добавления пустого вида или Исходного вида

@Override
    public int getItemViewType(int position) {
        return position % 5 == 2 ? 1 : 0;
    }

3) Нет необходимости добавлять черный вид в последнюю строку, поэтому измените логику

// 0= Original view 1= Blank View
  @Override
            public int getItemViewType(int position) {
                if((getItemCount()-(position-1))<5)
                return 0;
                else
                return position % 5 == 2 ? 1 : 0;
            }

4) Использовать ViewType в onCreateViewHolder

 @NonNull
    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        if (viewType == 1)
            return new ViewHolderBlank(inflater.inflate(R.layout.item_blank, parent, false));
        else
            return new ViewHolderOriginal(inflater.inflate(R.layout.item_add_orignal, parent, false));
}

5) Проверьте тип viewHolder в onBindViewHolder и выполните логику

@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
    if (holder instanceof ViewHolderBlank) {

    } else if (holder instanceof ViewHolderOriginal) {

    }
}

6) Добавить лишний элемент, который мы удалили, как пустой вид

 @Override
    public int getItemCount() {
        return totalItemList.size()+(totalItemList.size()/5);
    }

вы должны управлять черной записью при попытке доступа к totalItemList.get (position), иначе это вызывает исключение

1028 Мощн * *

enter image description here

...