2016-07-14 10 views
0

マイレーティングが保存されていません。各条件文を使って、私はonRatingChange()メソッドを呼び出します。だから私はアイテムに評価を与える。私は戻るボタンを押して、前の項目をクリックしますが、レーティングはデフォルトに戻されます。ユーザーの選択した評価を共有プリファレンスに保存しようとしています

import android.content.SharedPreferences; 
import android.preference.PreferenceManager; 
import android.support.v4.app.Fragment; 
import android.os.AsyncTask; 
import android.os.Bundle; 
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 java.util.Arrays; 

public class infoFragment extends Fragment implements RatingBar.OnRatingBarChangeListener { 

    TextView degrees; 
    ImageView image; 
    String stringtext; 
    String [] hold; 
    RatingBar rating; 
    SharedPreferences wmbPreference1; 
    SharedPreferences.Editor editor; 


    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     return inflater.inflate(R.layout.info_layout, container, false); 
    } 
    @Override 
    public void onViewCreated(View view, Bundle savedInstanceState){ 
     image = (ImageView) view.findViewById(R.id.imageView); 
     rating = (RatingBar) view.findViewById(R.id.ratingBar); 
     rating.setOnRatingBarChangeListener(this); 
     wmbPreference1 = PreferenceManager.getDefaultSharedPreferences(getActivity()); 
     degrees =(TextView)view.findViewById(R.id.textView); 
    } 

この方法は、私が参照としてこれを使用する設定 を設定を保存および/または取得するために使用されています方法onRatingChangedHow do you SAVE user rating in rating bar?

public void onRatingChanged(RatingBar ratingBar, float rating, 
          boolean fromTouch) { 
     //if nothing was saved do this 
     if(ratingBar==null) { 
      final int numStars = ratingBar.getNumStars(); 
      editor = wmbPreference1.edit(); 
      editor.putInt("numStars", numStars); 
      editor.commit(); 
      int ratings = wmbPreference1.getInt("numStars", 2); 
     } 
     else 
      // int number = wmbPreference1.getInt("numStars",0); trying to retreive saved data 
    } 
    public void setText(final String string) { 
     Character[] hold; 
     if(string == "apple"){ 
      String[] word = { " A \n", "B\n" }; 

      degrees.setText(Arrays.toString(word).replaceAll("\\[|\\]", ""));; 
      image.setImageResource(R.drawable.APPLE); 
      onRatingChanged(rating,0,true);//calling method to save data 
    } 
     if(string == "orange"){ 
      String[] word = { " AA\n", "AB\n" }; 
      degrees.setText(Arrays.toString(word).replaceAll("\\[|\\]", ""));; 
      image.setImageResource(R.drawable.orange); 
      onRatingChanged(rating,0,true);//calling method to save data 
     } 
    } 

    public void sentText(){ 
     new MyTask().execute(); 

    } 

    private class MyTask extends AsyncTask<String, String, String> { 

     @Override 
     protected String doInBackground(String... strings) { 
      Bundle b = getArguments(); 
      stringtext = b.getString("text"); 
      return null; 
     } 

     protected void onPostExecute(String result){setText(stringtext); 
      } 
     } 
    } 

答えて

0

を、RatingBarオブジェクトは常にnullではありません。 2番目のパラメータは、現在の番号が何を開始するかを表します。 getNumStarts()は、このratingBarmaxStartsを返します。

+0

ありがとうございます-1どのように私はユーザーが選択した時間から最初の時間を決定することができます。ヌルの代わりに0を使用しますか?私はgetNumStarsを使うことができない場合は、ユーザーが選択した数字を得るために何が使えますか?あなたは何を意味するのですか? – nameishi

+0

@ A.simpleは、私が提供したリファレンスを見ましたが、プログラムのために働いていました。そして、正しい答えとして選択されました。なぜそれが私にinssueを与えるのですか – nameishi

+0

- 1 0nCreateViewメソッドでratingBarを初期化できます。-2 onRatingChangedメソッドの最初のパラメータは、ユーザーがRatingBarを操作していることを表し、onCreateViewメソッドで定義したものです。 2番目のパラメータ。getNumStartsが返すメソッドを呼び出すこのRatingBarの合計開始点を返す –

関連する問題