Я хотел создать вид, как показано ниже. это вид в
горизонтальный вид переработчика
Я не вижу ничего образца RecyclerView
для вашего изображения, похоже, только ImageView
, чтобы выбрать фотографию в хранилище Android.
.. содержит текст и значок плюса. Изображение, чтобы показать человека
значок.
Если вы хотите Horizontal RecyclerView
с двумя изображениями и одним текстом:
"@+id/civProfilePic"
"@+id/add_user"
"@+id/add_user_tv"
Вы должны сделать класс MyAdapter.class
и MyContain.class
и, пожалуйста, ваш XML выше переименуйте в my_content.xml
вот код, который вам нужен:
обратите внимание, этот код использует FirebaseFirestore
пожалуйста, добавьте это в свой build.gradle
dependencies {
// Firestore
implementation 'com.google.firebase:firebase-firestore:18.1.0'
implementation 'com.google.firebase:firebase-storage:16.1.0'
// Other Firebase
// don't forget add this in your Manifest.xml , <uses-permission android:name="android.permission.INTERNET" />
implementation 'com.google.firebase:firebase-auth:16.1.0'
implementation 'com.google.android.gms:play-services-auth:16.0.1'
// Third-party libraries
// circle image
implementation 'de.hdodenhof:circleimageview:2.2.0'
// cropper if you need cropper when pick image from android storage don't forget this in your Manifest <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> and <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
implementation 'com.theartofdev.edmodo:android-image-cropper:2.6.0'
// reducing size image
implementation 'com.github.bumptech.glide:glide:4.6.1'
annotationProcessor 'com.github.bumptech.glide:compiler:4.6.1'
}
MyContain.class
public class MyContain {
private String civProfilePic;
private String add_user;
// need Empty contructor
public MyContain(){}
public MyContain(String civProfilePic, String add_user){
this.civProfilePic = civProfilePic;
this.add_user = add_user;
// don't enter add_user_tv because the Text should not has any getter method,
}
// get your image using this getter
public String getCivProfilePic() {return civProfilePic;}
public String getAddUserIcon() {return add_user;}
}
MyAdapter.class
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
public List<MyContent> contentList;
public Context context;
public MyContain(List<MyContent> contentList){
this.contentList = contentList;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.content_profile_seen_dashboard, parent, false);
context = parent.getContext();
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
holder.setIsRecyclable(false);
// get position of RecyclerView Items and getImage from MyContain class
String civProfilePic = contentList.get(position).getImage();
// set photo using String which contain http taken using getImage and load from firestore
holder.setProfilePhoto(civProfilePic);
// get position of RecyclerView Items and getAddUserIcon from MyContain class
String icon_add = contentList.get(position).getAddUserIcon();
// set icon using String which contain http taken using getAddUserIcon and load from firestore
holder.setIconAdd(icon_add);
}
@Override
public int getItemCount() {
return contentList.size();
}
public class ViewHolder extends RecyclerView.ViewHolder {
private View mView;
private ImageView civProfilePic;
private ImageView add_user;
public ViewHolder(View itemView){
super(itemView);
mView = itemView;
}
public void setProfilePhoto(String image) {
civProfilePic = mView.findViewById(R.id.civProfilePic);
RequestOptions requestOptions = new RequestOptions();
requestOptions.placeholder(R.drawable.icon_user_profile_silhoutte_big);
Glide.with(context).applyDefaultRequestOptions(requestOptions).load(image).into(civProfilePic);
}
public void setIcon(String icon) {
add_user = mView.findViewById(R.id.add_user);
RequestOptions requestOptions = new RequestOptions();
requestOptions.placeholder(R.drawable.icon_add_new_user);
Glide.with(context).applyDefaultRequestOptions(requestOptions).load(icon).into(add_user);
}
}
где вы хотите отобразить вид переработчика? Фрагмент или активность?
пример, когда ваш реселлер видит внутри MainActivity.
MainActivity.class
public class MainActivity extends AppCompatActivity {
private RecyclerView myRecycler;
private List<MyContent> contentList;
private MyAdapter myAdapter;
private Boolean isFirstPageFirstLoad = true;
private MyContent myContent;
private FirebaseFirestore firestore;
private FirebaseAuth mAuth;
private DocumentSnapshot lastVisible;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
firebaseAuth = FirebaseAuth.getInstance();
firebaseFirestore = FirebaseFirestore.getInstance();
contentList = new ArrayList<>();
myRecycler = view.findViewById(R.id.my_recycler);
myAdapter = new MyAdapter(contentList);
//horizontal recycler
myRecycler.setLayoutManager(new LinearLayoutManager(container.getContext(), LinearLayoutManager.HORIZONTAL, false));
myRecycler.setAdapter(myAdapter);
}
@Override
public void onStart() {
super.onStart();
loadFirstQuery();
}
public void loadFirstQuery() {
contentList.clear();
if (firebaseAuth.getCurrentUser() != null) {
myRecycler.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
// horizontal
Boolean reachRightSide = !recyclerView.canScrollHorizontally(-1);
// when recycler reach last right side
if (reachRightSide) {
loadMorePost();
}
}
});
// RETRIEVING PROFILE PHOTOS AND ICONS
Query firstQuery = firestore
.collection("ProfilePhoto")
.orderBy("timestamp", Query.Direction.DESCENDING)
.limit(5);
firstQuery.addSnapshotListener(new EventListener<QuerySnapshot>() {
@Override
public void onEvent(QuerySnapshot documentSnapshots, FirebaseFirestoreException e) {
if (isFirstPageFirstLoad) {
lastVisible = documentSnapshots.getDocuments().get(documentSnapshots.size() - 1);
}
for (DocumentChange doc : documentSnapshots.getDocumentChanges()) {
if (doc.getType() == DocumentChange.Type.ADDED) {
myContent = doc.getDocument().toObject(MyContent.class);
if (isFirstPageFirstLoad) {
contentList.add(myContent);
} else {
contentList.add(0, myContent);
}
// fire the event adapterSeen.notifyDataSetChanged();
}
}
isFirstPageFirstLoad = false;
}
});
}
}
public void loadMorePost() {
Query nextQuery = firestore
.collection("ProfilePhoto")
.orderBy("timestamp", Query.Direction.DESCENDING)
.startAfter(lastVisible)
.limit(5);
nextQuery.addSnapshotListener(new EventListener<QuerySnapshot>() {
@Override
public void onEvent(QuerySnapshot documentSnapshots, FirebaseFirestoreException e) {
if (!documentSnapshots.isEmpty()) {
lastVisible = documentSnapshots.getDocuments().get(documentSnapshots.size() - 1);
for (DocumentChange doc : documentSnapshots.getDocumentChanges()) {
if (doc.getType() == DocumentChange.Type.ADDED) {
myContent = doc.getDocument().toObject(MyContent.class);
contentList.add(myContent);
adapterSeen.notifyDataSetChanged();
}
}
}
}
});
}
не забудьте об этом, пожалуйста, используйте ограничения, это легко обрабатывать
main_activity.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout 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"
xmlns:app="http://schemas.android.com/apk/res-auto"
tools:context=".MainActivity">
<FrameLayout
android:layout_width="0dp"
android:layout_height="85dp"
android:layout_marginStart="0dp"
android:layout_marginEnd="0dp"
android:background="@drawable/line"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="1.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/constraint">
<android.support.v7.widget.RecyclerView
android:id="@+id/my_recycler"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
app:layoutManager="android.support.v7.widget.LinearLayoutManager" />
</FrameLayout>
</android.support.constraint.ConstraintLayout>
еще раз
сделать line.xml в рисованном виде
это очень маленькая линия
<item>
<shape android:shape="rectangle">
<stroke
android:color="@color/line"
android:width="0.5dp" />
</shape>
</item>
в colors.xml
<color name="line">#f1ecec</color>
есть вопросы?