RatingBar 和 RecyclerView
RatingBar and RecyclerView
我正在尝试制作一个应用程序,使用简单的评分器和回收器视图对 8 种不同类型的食物进行评分。按下 FAB 按钮只会添加一个评级为 0 的随机食物。除了评级栏的评级,我已经得到了大部分的工作。当我向上或向下滚动时,我失去了我的评级。如何在向上或向下滚动时存储食物的评分。
回收站视图:
package com.mycompany.alawamhm.foodrater;
import android.content.Context;
import android.graphics.Movie;
import android.icu.text.AlphabeticIndex;
import android.support.v7.widget.RecyclerView;
import android.text.Layout;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.RatingBar;
import android.widget.TextView;
import com.iarcuschin.simpleratingbar.SimpleRatingBar;
import org.w3c.dom.Text;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Random;
import javax.xml.transform.sax.SAXSource;
public class FoodAdapter extends RecyclerView.Adapter<FoodAdapter.ViewHolder>{
private Random mRandom = new Random();
private RecyclerView mRecyclerView;
final HashMap<String,Integer> defaultName;
final ArrayList<String> mNames=new ArrayList<>();
public FoodAdapter(RecyclerView rv){
defaultName = new HashMap<>();
defaultName.put("banana", R.drawable.banana);
defaultName.put("broccoli", R.drawable.broccoli);
defaultName.put("homemade bread", R.drawable.bread);
defaultName.put("chicken", R.drawable.chicken);
defaultName.put("chocolate", R.drawable.chocolate);
defaultName.put("ice cream", R.drawable.icecream);
defaultName.put("lima beans", R.drawable.limabeans);
defaultName.put("steak", R.drawable.steak);
for(String name : defaultName.keySet()){
mNames.add(name);
}
mRecyclerView = rv;
}
public String getRandomName(){
String[] names = new String[]{
"banana","broccoli","homemade bread","chicken",
"chocolate","ice cream","lima beans","steak"
};
return names[mRandom.nextInt(names.length)];
}
public void addName(){
mNames.add(0,getRandomName());
notifyItemInserted(0);
mRecyclerView.getLayoutManager().scrollToPosition(0);
}
@Override
public FoodAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.name_view,parent,false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
String name = mNames.get(position);
holder.mNameTextView.setText(name);
holder.mImage.setImageResource(defaultName.get(name));
holder.rBar.setRating(0);
}
@Override
public int getItemCount() {return mNames.size(); }
public void removeName(int position){
mNames.remove(position);
notifyItemRemoved(position);
}
class ViewHolder extends RecyclerView.ViewHolder{
private TextView mNameTextView;
private ImageView mImage;
SimpleRatingBar rBar;
public ViewHolder(View itemView) {
super(itemView);
mNameTextView = (TextView)itemView.findViewById(R.id.name_view);
mImage = (ImageView)itemView.findViewById(R.id.imageView);
rBar = (SimpleRatingBar)itemView.findViewById(R.id.ratingBar);
}
}
}
目前,每次将视图绑定到视图持有者时,评级栏都会设置为 0。在评分栏上设置一个侦听器,该侦听器运行一种方法以将新的评分值存储在 hashSet 中。然后在适配器中,不要将评级栏设置为 0,而是添加一个辅助方法,该方法遍历 hashMap 以检查是否已为正在充气的食物存储值。此方法应 return 存储值,如果食物尚未存储值,则应为 0。
我正在尝试制作一个应用程序,使用简单的评分器和回收器视图对 8 种不同类型的食物进行评分。按下 FAB 按钮只会添加一个评级为 0 的随机食物。除了评级栏的评级,我已经得到了大部分的工作。当我向上或向下滚动时,我失去了我的评级。如何在向上或向下滚动时存储食物的评分。
回收站视图:
package com.mycompany.alawamhm.foodrater;
import android.content.Context;
import android.graphics.Movie;
import android.icu.text.AlphabeticIndex;
import android.support.v7.widget.RecyclerView;
import android.text.Layout;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.RatingBar;
import android.widget.TextView;
import com.iarcuschin.simpleratingbar.SimpleRatingBar;
import org.w3c.dom.Text;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Random;
import javax.xml.transform.sax.SAXSource;
public class FoodAdapter extends RecyclerView.Adapter<FoodAdapter.ViewHolder>{
private Random mRandom = new Random();
private RecyclerView mRecyclerView;
final HashMap<String,Integer> defaultName;
final ArrayList<String> mNames=new ArrayList<>();
public FoodAdapter(RecyclerView rv){
defaultName = new HashMap<>();
defaultName.put("banana", R.drawable.banana);
defaultName.put("broccoli", R.drawable.broccoli);
defaultName.put("homemade bread", R.drawable.bread);
defaultName.put("chicken", R.drawable.chicken);
defaultName.put("chocolate", R.drawable.chocolate);
defaultName.put("ice cream", R.drawable.icecream);
defaultName.put("lima beans", R.drawable.limabeans);
defaultName.put("steak", R.drawable.steak);
for(String name : defaultName.keySet()){
mNames.add(name);
}
mRecyclerView = rv;
}
public String getRandomName(){
String[] names = new String[]{
"banana","broccoli","homemade bread","chicken",
"chocolate","ice cream","lima beans","steak"
};
return names[mRandom.nextInt(names.length)];
}
public void addName(){
mNames.add(0,getRandomName());
notifyItemInserted(0);
mRecyclerView.getLayoutManager().scrollToPosition(0);
}
@Override
public FoodAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.name_view,parent,false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
String name = mNames.get(position);
holder.mNameTextView.setText(name);
holder.mImage.setImageResource(defaultName.get(name));
holder.rBar.setRating(0);
}
@Override
public int getItemCount() {return mNames.size(); }
public void removeName(int position){
mNames.remove(position);
notifyItemRemoved(position);
}
class ViewHolder extends RecyclerView.ViewHolder{
private TextView mNameTextView;
private ImageView mImage;
SimpleRatingBar rBar;
public ViewHolder(View itemView) {
super(itemView);
mNameTextView = (TextView)itemView.findViewById(R.id.name_view);
mImage = (ImageView)itemView.findViewById(R.id.imageView);
rBar = (SimpleRatingBar)itemView.findViewById(R.id.ratingBar);
}
}
}
目前,每次将视图绑定到视图持有者时,评级栏都会设置为 0。在评分栏上设置一个侦听器,该侦听器运行一种方法以将新的评分值存储在 hashSet 中。然后在适配器中,不要将评级栏设置为 0,而是添加一个辅助方法,该方法遍历 hashMap 以检查是否已为正在充气的食物存储值。此方法应 return 存储值,如果食物尚未存储值,则应为 0。