Альтернативой использованию API является использование навигатора местоположения HTML 5 для запроса браузера о местоположении пользователя. Я искал аналогичный подход, как в вопросе, но я обнаружил, что HTML 5 Navigator работает лучше и дешевле для моей ситуации. Пожалуйста, подумайте, что ваш сценарий может быть другим. Получить позицию пользователя с помощью Html5 очень просто:
function getLocation()
{
if (navigator.geolocation)
{
navigator.geolocation.getCurrentPosition(showPosition);
}
else
{
console.log("Geolocation is not supported by this browser.");
}
}
function showPosition(position)
{
console.log("Latitude: " + position.coords.latitude +
"
Longitude: " + position.coords.longitude);
}
Попробуйте сами Учебник по геолокации W3Schools
Хорошо. Попробуйте это: создайте какой-нибудь класс, который, как я вижу, у вас есть Изображение и имя, а Имя класса - Категория:
public class Category {
private String CategoryName;
private String CategoryImage;
public Category() {
}
public Category(String categoryName, String categoryImage) {
CategoryName = categoryName;
CategoryImage = categoryImage;
}
public String getCategoryName() {
return CategoryName;
}
public void setCategoryName(String categoryName) {
CategoryName = categoryName;
}
public String getCategoryImage() {
return CategoryImage;
}
public void setCategoryImage(String categoryImage) {
CategoryImage = categoryImage;
}}
И еще одно упражнение с recyclerView
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".Category_List">
<android.support.v7.widget.RecyclerView
android:id="@+id/category_recycler_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:listitem="@layout/category_item" />
И один файл ресурсов макета с просмотром карты, в котором отображается элемент категории
<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="8dp">
<RelativeLayout
android:id="@+id/category_relative_layout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/category_image_item"
android:layout_width="match_parent"
android:layout_height="160dp"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
android:layout_alignParentEnd="true"
android:layout_marginBottom="8dp"
android:scaleType="centerCrop"
app:srcCompat="@drawable/ic_image" />
<TextView
android:id="@+id/category_name_item"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/category_image_item"
android:layout_alignParentStart="true"
android:layout_marginStart="8dp"
android:layout_marginBottom="8dp"
android:text="TextView"
android:textSize="24sp" />
</RelativeLayout>
NextPap Category
public class CategoryAdapter extends FirestoreRecyclerAdapter<Category, CategoryAdapter.CategoryHolder> {
private OnItemClickListener listener;
public CategoryAdapter(@NonNull FirestoreRecyclerOptions<Category> options) {
super(options);
}
@Override
protected void onBindViewHolder(@NonNull CategoryHolder holder, int position, @NonNull Category model) {
holder.CategoryName.setText(model.getCategoryName());
Picasso.get().load(model.getCategoryImage()).error(R.drawable.ic_image).placeholder(R.drawable.ic_image).into(holder.CategoryImage); }
@NonNull
@Override
public CategoryHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.category_item, viewGroup, false);
return new CategoryHolder(v);
}
public class CategoryHolder extends RecyclerView.ViewHolder {
public TextView CategoryName;
public ImageView CategoryImage;
public CategoryHolder(@NonNull View itemView) {
super(itemView);
CategoryName = itemView.findViewById(R.id.category_name_item);
CategoryImage = itemView.findViewById(R.id.category_image_item);
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
int position = getAdapterPosition();
if (position != RecyclerView.NO_POSITION && listener != null) {
listener.onItemClick(getSnapshots().getSnapshot(position), position);
}
}
});
}
}
public interface OnItemClickListener {
void onItemClick(DocumentSnapshot documentSnapshot, int position);
}
public void setOnItemClickListener(CategoryAdapter.OnItemClickListener listener) {
this.listener = listener;
}
}
[ 1112] В MainActivity настройте окно повторного просмотра: сверху после метода создания создайте ссылку на Adapter,
public class MainActivity extends AppCompatActivity {
private FirebaseFirestore db = FirebaseFirestore.getInstance();
private CollectionReference categoryRef = db.collection("category_tbl");
public CategoryAdapter categoryAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_category__list);
setTitle(R.string.category_list_title);
setUpRecyclerView();
}
private void setUpRecyclerView() {
Query query = categoryRef.orderBy("categoryPrior", Query.Direction.DESCENDING);
final FirestoreRecyclerOptions<Category> category_options = new FirestoreRecyclerOptions.Builder<Category>()
.setQuery(query, Category.class).build();
categoryAdapter = new CategoryAdapter(category_options);
RecyclerView recyclerView = findViewById(R.id.category_recycler_view);
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
recyclerView.setAdapter(categoryAdapter);
}
@Override
protected void onStart() {
super.onStart();
categoryAdapter.startListening();
}
@Override
protected void onStop() {
super.onStop();
categoryAdapter.stopListening();
}
В конце попробуйте добавить некоторые данные непосредственно в FiredatabaseFiresotre и посмотреть, отображается ли оно.