2017-07-08 12 views
1

私は単純な評価者とrecyclerviewで8種類の食品を評価するアプリケーションを作成しようとしています。 FABボタンを押すと、評価のついたランダムなフードが追加されます。私は、評価バーの評価を除いて、ほとんどが動作するようにしました。私が上または下にスクロールすると、私は持っていた評価を失う。私が上下にスクロールするとき、どのように食べ物の評価を保存できますか?RatingBarとRecyclerView

RecyclerView:現在、評価バーが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

このチェックでは、キー(フード)​​が一致する場合にのみ数値を返します。そうでなければ0を返します。キーが一致するかどうかにかかわらず、評価を返すように現れます。アプリの実行中にのみ存在します。アプリケーションが閉じられると、hashMapはクリアされます。データを保持したい場合は、SharedPreferencesまたはデータベースに保存する必要があります。 –

答えて

0

。新しい評価値をハッシュセットに格納するメソッドを実行する評価バーにリスナーを設定します。次に、アダプタで、評価バーを0に設定する代わりに、ハッシュマップを反復処理するヘルパーメソッドを追加して、膨らまされている食品の値が格納されているかどうかを確認します。このメソッドは、格納された値を返します。値がまだ格納されていない場合は0を返します。

+0

それは、ありがとう!しかし、今では同じ食べ物はすべて同じ格付けを持っています。 – Hussein

+0

これは一致したときに値を返しますが、キー(食べ物)が繰り返されるため、同じキーを共有するため、同じ評価を得ることになります。たとえば、私がチョコレート3を評価し、別のチョコレートをランダムに追加すると、キー(チョコレート)がすでに存在し、3つの星があるため、デフォルトで3つの星に設定されます。 – Hussein

+0

現在の食品がhashMap内の食品と一致するかどうかにかかわらず、ヘルパーメソッドが保存された値を返すように聞こえます。ヘルパーメソッドは、現在のフレーズがhashMapのキー(フード)​​と一致する場合にのみ現在のビューのレーティングを返す必要があります。それ以外の場合は0を返します。 –