【发布时间】:2019-12-22 20:59:19
【问题描述】:
我正在创建一个包含 CardView 的 RecyclerView,每张卡片都有标题、描述和图像。使用onBindViewHolder 只允许我添加一个标题,我不能让它添加其他项目。这是我尝试做到的方式。
这是我的适配器:
public class userDressAdapter extends RecyclerView.Adapter<userDressAdapter.ViewHolder> {
private LayoutInflater layoutInflater;
private List<String> data;
private Object ViewGroup;
userDressAdapter(Context context, List<String> data) {
this.layoutInflater = LayoutInflater.from(context);
this.data = data;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = layoutInflater.inflate(R.layout.dress_recycler_view, (android.view.ViewGroup) ViewGroup, false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
String title = data.get(position);
ViewHolder.dressTitle.setText(title);
ViewHolder.dressDescription.setText(title);
}
@Override
public int getItemCount() {
return data.size();
}
public static class ViewHolder extends RecyclerView.ViewHolder {
static TextView dressTitle;
static TextView dressDescription;
public ViewHolder(@NonNull View itemView) {
super(itemView);
dressTitle = itemView.findViewById(R.id.userDressTitleText);
dressDescription = itemView.findViewById(R.id.userDressDescriptionText);
}
}
}
我使用它作为我的视图的主适配器,这是我从主 Java 类中调用它的方式:
public class UserDressView extends AppCompatActivity {
private static final String TAG = "UserDressView";
RecyclerView recyclerView;
com.innoventiq.fostania.userDressAdapter userDressAdapter;
ArrayList<String> items;
ArrayList<String> description;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_user_dress_view);
items = new ArrayList<>();
description = new ArrayList<>();
ReadDressData();
}
public void AddDressToList(String theData) {
items.add(theData);
recyclerView = findViewById(R.id.userDressRecyclerView);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
userDressAdapter = new userDressAdapter(this, items);
recyclerView.setAdapter(userDressAdapter);
}
public void AddDressDescriptionToList(String theData) {
description.add(theData);
recyclerView = findViewById(R.id.userDressRecyclerView);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
userDressAdapter = new userDressAdapter(this, description);
recyclerView.setAdapter(userDressAdapter);
}
public void ReadDressData() {
FirebaseFirestore db = FirebaseFirestore.getInstance();
db.collection("dress")
.get()
.addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if (task.isSuccessful()) {
for (QueryDocumentSnapshot document : Objects.requireNonNull(task.getResult())) {
Log.d(TAG, document.getId() + " => " + document.getData());
AddDressToList(String.valueOf(document.getData().get("title")));
AddDressDescriptionToList(String.valueOf(document.getData().get("description")));
}
} else {
Log.w(TAG, "Error getting documents.", task.getException());
}
}
});
}
}
由于我对 android studio 和 JAVA 还很陌生,所以我没有找到这方面的指南。我向 Adapter 添加了 2 个添加到不同列表的函数,但结果是一团糟。到处都在添加文本,并且项目被复制。
【问题讨论】:
标签: java android firebase android-recyclerview google-cloud-firestore