0

Так что приложение, которое я пишу, имеет два (до сих пор) прошивки, которые находятся во Фрагменте. Строка рейтинга находится в главном файле макета. Мне нужно, чтобы прогресс рейтинговой панели изменился на основе значений SeekBars. Вот код, так что у вас есть идея получше:Оценка бара не меняется

Фрагмент Java Файл

package com.example.tipquiz; 

import android.app.Fragment; 
import android.os.Bundle; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.RatingBar; 
import android.widget.SeekBar; 
import android.widget.SeekBar.OnSeekBarChangeListener; 
import android.widget.TextView; 

public class QuizFragment extends Fragment implements OnSeekBarChangeListener { 

    SeekBar fqBar, cBar; 
    TextView fqTV, cTV; 
    TextView fqTVP, cTVP; 
    RatingBar rb; 


    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
     // Inflate the layout for this fragment 
     View view = inflater.inflate(R.layout.quiz_fragment_layout, container, 
       false); 
     //Inflate the Main layout to access the RatingBar 
     View mainView = inflater.inflate(R.layout.activity_main, container, false); 
     //FoodQuality Bar 
     fqBar = (SeekBar) view.findViewById(R.id.seekBarFQ); 
     fqBar.setOnSeekBarChangeListener(this); 
     fqTV = (TextView) view.findViewById(R.id.textViewFQ2); 
     fqTVP = (TextView) view.findViewById(R.id.textViewFQP); 

     //Cleanliness Bar 
     cBar = (SeekBar) view.findViewById(R.id.seekBarC); 
     cBar.setOnSeekBarChangeListener(this); 
     cTV = (TextView) view.findViewById(R.id.textViewC2); 
     cTVP = (TextView) view.findViewById(R.id.textViewCP); 

     rb = (RatingBar) mainView.findViewById(R.id.ratingBar1); 
     return view; 


    } 

    @Override 
    public void onProgressChanged(SeekBar arg0, int progress, boolean fromUser) { 
     switch(arg0.getId()) { 

     case R.id.seekBarFQ: 
      if(progress > 70 && progress < 90){ 
       fqTV.setText("Above Average - "); 
       rb.setRating(4); 
      }else if(progress > 40 && progress <= 70){ 
       fqTV.setText("Average - "); 
      }else if(progress <= 40){ 
       fqTV.setText("Awful - "); 
      }else if(progress > 90){ 
       fqTV.setText("Perfect - "); 
      } 
      fqTVP.setText(progress + "%"); 
      break; 

     case R.id.seekBarC: 
      if(progress > 70 && progress < 90){ 
       cTV.setText("Above Average - ");   
      }else if(progress > 40 && progress <= 70){ 
       cTV.setText("Average - "); 
      }else if(progress <= 40){ 
       cTV.setText("Awful - "); 
      }else if(progress > 90){ 
       cTV.setText("Perfect - "); 
      } 
      cTVP.setText(progress + "%"); 
      break; 
     } 
    } 

    @Override 
    public void onStartTrackingTouch(SeekBar arg0) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void onStopTrackingTouch(SeekBar arg0) { 
     // TODO Auto-generated method stub 

    } 

} 

Main Class

package com.example.tipquiz; 

import android.app.Activity; 
import android.app.FragmentManager; 
import android.app.FragmentTransaction; 
import android.os.Bundle; 
import android.view.Menu; 
import android.view.View; 
import android.widget.ImageView; 
import android.widget.RatingBar; 
import android.widget.RatingBar.OnRatingBarChangeListener; 
import android.widget.TextView; 

public class MainActivity extends Activity implements OnRatingBarChangeListener{ 

    // Testing Stuff to show the rating value, will need to use later for maths 
    static RatingBar rb; 
    TextView tv; 

    // The Image used as the DropDown button, Rotate code below 
    ImageView dropDownButton; 

    Boolean hasRotated = false; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.activity_main); 
     dropDownButton = (ImageView) findViewById(R.id.dropDownButton); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 
    FragmentManager fm = getFragmentManager(); 
    QuizFragment qf = new QuizFragment(); 

    public void dropDown(View view){ 
     if(hasRotated == false){ 
      FragmentTransaction ft = fm.beginTransaction(); 
      ft.setCustomAnimations(android.R.animator.fade_in, android.R.animator.fade_out); 
      dropDownButton.setRotation(90); 
      ft.add(R.id.quizFragment, qf); 
      ft.show(qf); 
      ft.commit(); 
      hasRotated = true; 
     }else if(hasRotated == true){ 
      FragmentTransaction ft = fm.beginTransaction(); 
      ft.setCustomAnimations(android.R.animator.fade_out, android.R.animator.fade_out); 
      dropDownButton.setRotation(0); 
      hasRotated = false; 
      ft.remove(qf); 
      ft.commit(); 
     } 
    } 

    @Override 
    public void onRatingChanged(RatingBar ratingBar, float rating, 
      boolean fromTouch) { 
     // final int numStars = ratingBar.getNumStars(); 
     tv.setText(rating + "/5.0"); 
    } 
    // http://www.compiletimeerror.com/2013/08/android-rating-bar-example.html#.U7SZ5fldXm4 
} 

Я пытался сделать это много способов, и большинство способов, которые я делал, приводят к ошибке в Eclipse или сбою. Метод, который я использую сейчас, не терпит краха или не дает никаких ошибок, но панель оценки не изменяется, когда это предполагается.

Я также попытался просто использовать MainActivity.rb.setProgress (4); в, если заявление, но я получил эту аварию:

D/(938): HostConnection :: получить() Новый хост-подключение установлено 0xb7ca38d0, TID 938 W/EGL_emulation (938): eglSurfaceAttrib не реализована D/OpenGLRenderer (938): включение режима отладки 0 E/InputEventReceiver (938): событие ввода диспетчера исключений. Завершение работы VM W/dalvikvm (938): threadid = 1: выход с исключающим исключением (группа = 0xb3b0db90) D/dalvikvm (938): GC_FOR_ALLOC освобожден 94K, 6% бесплатно 3184K/3360K, приостановлено на 31 мс, всего 37 мс Е/AndroidRuntime (938): неустранимое: Основной Е/AndroidRuntime (938): Процесс: com.example.tipquiz, ПИД: 938 Х/AndroidRuntime (938): java.lang.NullPointerException Х/AndroidRuntime (938): at com.example.tipquiz.QuizFragment.onProgressChanged (QuizFragment.java:50) E/AndroidRuntime (938): at android.widget.SeekBar.onProgressRefresh (SeekBar.java:91) E/AndroidRuntime (938): на android.widget.ProgressBar.doRefreshProgress (ProgressBar.java:655) E/AndroidRuntime (938): на android.widget.Progress Bar.refreshProgress (ProgressBar.java:667) E/AndroidRuntime (938): at android.widget.ProgressBar.setProgress (ProgressBar.java:714) E/AndroidRuntime (938): at android.widget.AbsSeekBar.trackTouchEvent (AbsSeekBar.java:451) E/AndroidRuntime (938): at android.widget.AbsSeekBar.onTouchEvent (AbsSeekBar.java:379) E/AndroidRuntime (938): at android.view.View.dispatchTouchEvent (View.java: 7690) E/AndroidRuntime (938): at android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java:2216) E/AndroidRuntime (938): at android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:1959) E/AndroidRuntime (938): at android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java:2216) E/AndroidRuntime (938): на android.view.ViewGroup.dispatchTouchEv ent (ViewGroup.java:1959) E/AndroidRuntime (938): at android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java:2216) E/AndroidRuntime (938): at android.view.ViewGroup.dispatchTouchEvent (ViewGroup. java: 1959) E/AndroidRuntime (938): at android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java:2216) E/AndroidRuntime (938): at android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:1959) E/AndroidRuntime (938): at android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java:2216) E/AndroidRuntime (938): at android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:1959) E/AndroidRuntime (938): at android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java: 2216) E/AndroidRuntime (938): at android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:1959) E/AndroidRuntime (938): at com.android.internal.policy.impl.PhoneWindow $ DecorView. superDispatchTouchEvent (PhoneWindow.java:2066) E/AndroidRuntime (938): at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent (PhoneWindow.java:1515) E/AndroidRuntime (938): at android.app. Activity.dispatchTouchEvent (Activity.java:2457) E/AndroidRuntime (938): at com.android.internal.policy.impl.PhoneWindow $ DecorView.dispatchTouchEvent (PhoneWindow.java:2014) E/AndroidRuntime (938): at android.view.View.dispatchPointerEvent (View.java:7870) E/AndroidRuntime (938): at android.view.ViewRootImpl $ ViewPostImeInputStage.processPointerEvent (ViewRootImpl.java:3919) E/AndroidRuntime (938): at android.view.ViewRootImpl $ ViewPostImeInputStage.onProcess (ViewRootImpl.java:3808) E/AndroidRuntime (938): at android.view.ViewRootImpl $ InputStage.deliver (ViewRootImpl.java:3406) E/AndroidRuntime (938): at android.view.ViewRootImpl $ InputStage.onDeliverToNext (ViewRootImpl.java:3456) E/AndroidRuntime (938): at android.view.ViewRootImpl $ InputStage.forward (ViewRootImpl.java:3425) E/AndroidRuntime (938): at android.view.ViewRootImpl $ AsyncInputStage.forward (ViewRootImpl.java:3510) E/AndroidRuntime (938): at android.view.ViewRootImpl $ InputStage.apply (ViewRootImpl.java:3433) E/AndroidRuntime (938): at android.view.ViewRootImpl $ AsyncInputStage.apply (ViewRootImpl.java:3567) E/AndroidRuntime (938): at android.view.ViewRootImpl $ InputSt age.deliver (ViewRootImpl.java:3406) E/AndroidRuntime (938): at android.view.ViewRootImpl $ InputStage.onDeliverToNext (ViewRootImpl.java:3456) E/AndroidRuntime (938): at android.view.ViewRootImpl $ InputStage.forward (ViewRootImpl.java:3425) E/AndroidRuntime (938): at android.view.ViewRootImpl $ InputStage.apply (ViewRootImpl.java:3433) E/AndroidRuntime (938): at android.view.ViewRootImpl $ InputStage.deliver (ViewRootImpl.java:3406) E/AndroidRuntime (938): at android.view.ViewRootImpl.deliverInputEvent (ViewRootImpl.java:5520) E/AndroidRuntime (938): at android.view.ViewRootImpl.doProcessInputEvents (ViewRootImpl.java:5500) E/AndroidRuntime (938): at android.view.ViewRootImpl.enqueueInputEvent (ViewRootImpl.java:5471) E/AndroidRuntime (938): at и roid.view.ViewRootImpl $ WindowInputEventReceiver.onInputEvent (ViewRootImpl.java:5594) E/AndroidRuntime (938): at android.view.InputEventReceiver.dispatchInputEvent (InputEventReceiver.java:182) E/AndroidRuntime (938): у android. view.InputEventReceiver.nativeConsumeBatchedInputEvents (Родной метод) Е/AndroidRuntime (938): в android.view.InputEventReceiver.consumeBatchedInputEvents (InputEventReceiver.java:174) Е/AndroidRuntime (938): в android.view.ViewRootImpl.doConsumeBatchedInput (ViewRootImpl .java: 5573) E/AndroidRuntime (938): at android.view.ViewRootImpl $ ConsumeBatchedInputRunnable.run (ViewRootImpl.java:5613) E/AndroidRuntime (938): на android.view.Choreographer $ CallbackRecord.run (Хореограф .java: 749) E/AndroidRuntime (938): на android.view.Choreographer.doCal lbacks (Choreographer.java:562) E/AndroidRuntime (938): на android.view.Choreographer.doFrame (Хореограф.java:530) E/AndroidRuntime (938): на android.view.Choreographer $ FrameDisplayEventReceiver.run (Хореограф.ява: 735) E/AndroidRuntime (938): at android.os.Handler.handleCallback (Handler.java:733) E/AndroidRuntime (938): at android.os.Handler.dispatchMessage (Handler.java: 95) E/AndroidRuntime (938): a

+0

Изменяется ли текст при перемещении стрелки? –

+0

Да, текст меняется отлично на обоих профайлах, и они движутся независимо друг от друга, и это то, что я хочу. Тем не менее, авария, которую я опубликовал, происходит, когда значок поиска качества пищи входит в 70% текстовую область. –

+0

@DtrollMC. Какая строка 50 в 'QuizFragment'? –

ответ

0

Попробуйте поплавок.вместо 4 попытайтесь поместить 4f

+0

На самом деле я только что протестировал это, и неважно, является ли это int или float. Приносим извинения за неудобства. –

1

В MainActivity:

public static int rating = 0; 

private RatingBar rb; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    ... 
    rb = (RatingBar) findViewById(R.id.ratingBar1); 
    rb.setRating(rating); 
} 

И в QuizFragment: REMOVE эта линия

rb = (RatingBar) mainView.findViewById(R.id.ratingBar1);

затем:

if (progress > 70 && progress < 90){ 
    fqTV.setText("Above Average - "); 
    MainActivity.rating = 4; 
} 
+0

Очень умная идея, поэтому я пробовал это, и тем не менее рейтинг бара по-прежнему не меняется. Я пробовал то же самое с setProgress –

+0

@DtrollMC попробуйте добавить это в RatingBar 'android: isIndicator =" false "' –

+0

nope, который тоже не работает. Я должен также упомянуть, что, когда SeekBars находятся на отметке 70, они, кажется, растут чуть больше. Не очень уместно, но я думал, что должен поделиться. –

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