首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RatingBar和RecyclerView

RatingBar和RecyclerView
EN

Stack Overflow用户
提问于 2017-07-09 02:05:02
回答 1查看 774关注 0票数 1

我正在尝试制作一个应用程序,用简单的评分器和回收视图对8种不同类型的食物进行评级。按下FAB按钮只会添加一个评级为0的随机食物。我已经让它的大部分工作,除了评级栏的评级。当我向上或向下滚动时,我失去了我的收视率。当我向上或向下滚动时,如何存储食物的评级。

RecyclerView:

代码语言:javascript
复制
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);
    }
}

}

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-09 02:51:19

当前,每次将视图绑定到视图持有者时,评级栏都被设置为0。在评级栏上设置一个侦听器,该侦听器运行一个方法以将新的评级值存储在hashSet中。然后,在适配器中,不是将分级栏设置为0,而是添加一个辅助方法,该方法遍历hashMap以检查是否为正在膨胀的食品存储了一个值。此方法应返回存储值,如果食物尚未存储值,则返回0。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44989278

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档