android создание групп в программе повторного просмотра от arraylist - PullRequest
0 голосов
/ 01 апреля 2020

У меня есть список объектов, где каждый объект содержит свою координату позиции (широта, долгота), как показано ниже,

    ArrayList<Person> friends = new ArrayList<Person>();
    Person person = new Person("Alex",42.387310,-101.423977);
    friends.add(person ); 

Я показываю список в RecyclerView, который работает нормально, но мне нужно показать этот список в группах. Например, если есть список из 10 человек, и двое из них близки друг к другу, как тогда, сделайте группу из этих двух.

Я могу найти расстояние от их lat - long , но я не знаю, как создать группу на таком расстоянии. Мне также нужен уникальный цвет фона для каждой группы, т.е. когда расстояние между двумя или более людьми составляет менее 50 метров, чем создать группу из этого объекта и визуализировать этот элемент с этим фоновым цветом

Текущий адаптер

      public   class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> {
           private ArrayList<NearMe> mDataset;

           public  class MyViewHolder extends RecyclerView.ViewHolder {
               View mView;
               public MyViewHolder(View itemView) {
                   super(itemView);
                   mView = itemView;
                   FrameLayout group_countx = (FrameLayout) mView.findViewById(R.id.count_badge);
                   group_countx.setVisibility(View.INVISIBLE);
               }

               public void setTitle(String title) {
                   String output = title.substring(0, 1).toUpperCase() + title.substring(1);
                   TextView post_title = (TextView) mView.findViewById(R.id.name);
                   post_title.setText(output);
               }

           }
           public MyAdapter(ArrayList<NearMe> myDataset) {
               mDataset = myDataset;
           }
           @Override
           public MyAdapter.MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
               View view = LayoutInflater.from(parent.getContext())
                       .inflate(R.layout.contact_row, parent, false);
               return new MyViewHolder(view);
           }
           @Override
           public void onBindViewHolder(MyViewHolder holder, int position) {



                 Double Latitude = mDataset.get(position).getLatitude();
                 Double Longitude = mDataset.get(position).getLongitude();


                 holder.setTitle(mDataset.get(position).getName());



               holder.mView.setOnClickListener(new View.OnClickListener() {
                   @Override
                   public void onClick(View v) {
                       Toast.makeText(MainActivity.this, "Clicked", Toast.LENGTH_SHORT).show();
                   }
               });

           }
           @Override
           public int getItemCount() {
               return mDataset.size();
           }
       }

Пример вывода

enter image description here

Изменить 2 У меня есть создал метод, который добавляет тот же фон, если они ближе, но это также добавляет цвет к отдельным строкам

моя функция

 for (int i = 0; i < nearByFriends.size(); i++) {
            String groupID = "group_"+i;
            Random rnd = new Random();
            int color = Color.argb(255, rnd.nextInt(256), rnd.nextInt(256), rnd.nextInt(256));
            NearMe f1 = nearByFriends.get(i);
            for (int ii = 0; ii < nearByFriends.size(); ii++) {
                    NearMe f2 = nearByFriends.get(ii);
                    Double d = SharedHelper.distance(f1.getLatitude(), f1.getLongitude(),f2.getLatitude(), f2.getLongitude(), 'K');
                    if(d <=  0.1) {
                        nearByFriends.get(i).setColor(color);
                        nearByFriends.get(ii).setColor(color);
                        nearByFriends.get(i).setNearby(true);
                        nearByFriends.get(ii).setNearby(true);
                    }
            }
        }

1 Ответ

0 голосов
/ 01 апреля 2020

Если вы можете рассчитать расстояние, то я бы предложил добавить цвет в качестве другого параметра для объекта Nearme перед отправкой его в представление переработчика.

Посмотрите на следующий пример, он должен поставить вас в направление.

Так вы можете составить группу людей по их расстоянию. Вы можете сохранить список цветов в папке «Значения» и использовать разные цвета для каждой новой группы.

class person {
    Integer distance;
    String color;

    public person(Integer distance, String distance) {
        this.distance= distance;
        this.color = color;
    }




List<person> personList = new ArrayList<>();
    personList.add(new person(5, ""));
    personList.add(new person(10, ""));
    personList.add(new person(25, ""));
    personList.add(new person(28, ""));
    personList.add(new person(52, ""));
    personList.add(new person(80, ""));
    personList.add(new person(90, ""));
    personList.add(new person(120, ""));
    personList.add(new person(150, ""));
    personList.add(new person(1030, ""));

    for (int i = 0; i < personList.size(); i++) {
        person personOne = personList.get(i);
        for (int j = i + 1; j < personList.size(); j++) {
            person personTwo = personList.get(j);
            if (personOne.distance- personTwo.distance< 5 && personOne.distance- personTwo.distance> -5) {
                personTwo.color = "black";
                personOne.color = "black";
            }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...