2016-07-12 4 views
0

Как только пользователь выбирает элемент из списка в другом фрагменте, он приводит вас к этому фрагменту. И у меня возникают проблемы с сохранением рейтинга пользователей, который был выбран. когда пользователь возвращается, должен быть тот же рейтинг, который был ранее выбран.Можете ли вы использовать SharedPreferences внутри фрагмента?

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 { 

    TextView degrees; 
    ImageView image; 
    String stringtext; 
    String [] hold; 
    private 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)).setOnRatingBarChangeListener(this); 
      wmbPreference1 = PreferenceManager.getDefaultSharedPreferences(this); 
      degrees =(TextView)view.findViewById(R.id.textView); 

     } 

    public void onRatingChanged(RatingBar ratingBar, float rating, 
          boolean fromTouch) { 
     final int numStars = ratingBar.getNumStars(); 
     editor = wmbPreference1.edit(); 
     editor.putInt("numStars", numStars); 
     editor.commit(); 
     int ratings = wmbPreference1.getInt("numStars", 0); 
    } 
    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 в условном операторе для того, чтобы сэкономить?

 if(string == "orange"){ 
      String[] word = { " AA\n", "AB\n" }; 
      degrees.setText(Arrays.toString(word).replaceAll("\\[|\\]", ""));; 
      image.setImageResource(R.drawable.bruce); 
     } 

    } 

    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

Ваш Fragment должен реализовать OnRatingBarChangeListener:

public class infoFragment extends Fragment implements OnRatingBarChangeListener 

Другое дело, что setOnRatingChangeListener не возвращает значение, так что вы не можете присвоить возвращаемое значение rating, как вы делали.

Вы должны сделать:

rating = (RatingBar) view.findViewById(R.id.ratingBar); 
rating.setOnRatingBarChangeListener(this); 
+0

Спасибо, извините, чтобы вернуться так поздно. поэтому ошибка исчезла, но мои рейтинги не сохраняются. с каждой условной операцией я вызываю метод onRatingChange(). поэтому, как только я даю элементу рейтинг. Я нажимаю кнопку «Назад» и повторно нажимаю на элемент, но рейтинг возвращается к значению по умолчанию. – nameishi

+0

Пожалуйста, задайте новый вопрос, и я могу попытаться помочь вам –

Смежные вопросы