2013-06-24 1 views
0

У меня есть задача async, которая проверяет, есть ли у пользователя определенный элемент, путем проверки базы данных. Если у них есть предмет, тогда я раздуваю рейтинг, если не надуть кнопку, чтобы они могли добавить элемент.проблема с доступом к раздутой оценкеBar в Android

Я раздуть рейтинг бар в классе, который простирается AsyncTask с:

//inflate star rater 
       LayoutInflater mInflater = (LayoutInflater)c.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
       LinearLayout addButton = (LinearLayout)((Activity) c).findViewById(R.id.addBeerLayout); 
       addButton.addView(mInflater.inflate(R.layout.addrate_layout, null)); 

       addListenerOnRatingBar(); 

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

Мой addListenerOnRatingBar() метод выглядит следующим образом:

public void addListenerOnRatingBar() { 

     RatingBar ratingBar = (RatingBar) findViewById(R.id.beerRatingBar); 


     //if rating value is changed, 
     //display the current rating value in the result (textview) automatically 
     ratingBar.setOnRatingBarChangeListener(new OnRatingBarChangeListener() { 
      public void onRatingChanged(RatingBar ratingBar, float rating, 
       boolean fromUser) { 

       //next async task to update online database 

      } 
     }); 
     } 

findviewbyid дает эту ошибку в затмении:

The method findViewById(int) is undefined for the type CheckBeerJSON 

который я предполагаю, потому что это не распространяется деятельность, поэтому я смущен на как точно реализовать это.

Завышенный ratebar файл XML:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 



    <RatingBar 
     android:id="@+id/beerRatingBar" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:numStars="5" 
     android:stepSize="1.0" 
     android:rating="0" /> 


</LinearLayout> 
+0

ли вы посмотрите на рейтинг бар с надутым вида? 'inflatedviewlayout.findViewById (int)' – kabuto178

+0

Не уверен, что вы имеете в виду. Функция addlistener в моей асинхронной задаче – Mike

ответ

1

я не уверен, но предполагаете, что вы приняли RatingBar в вашем addrate_layout макете.

Если это случай, вы должны найти RatingBar из раздутого макета.

Для exmaple:

mInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
View view = mInflater.inflate(R.layout.addrate_layout, null); 
addListenerOnRatingBar(view); 

Modified метода пропускания View:

public void addListenerOnRatingBar(View view) { 

     RatingBar ratingBar = (RatingBar) view.findViewById(R.id.beerRatingBar); 


     //if rating value is changed, 
     //display the current rating value in the result (textview) automatically 
     ratingBar.setOnRatingBarChangeListener(new OnRatingBarChangeListener() { 
      public void onRatingChanged(RatingBar ratingBar, float rating, 
       boolean fromUser) { 

       //next async task to update online database 

      } 
     }); 
     } 
+0

раздувает в mInflater.inflate и т. Д. Дает эту ошибку: Метод inflate (byte []) в типе Inflater не применим для аргументов (int, null) – Mike

+0

Надеюсь, что вы правильно инициализированный mInflater. Проверьте udpated code. –

+0

Ужасно, но теперь я получаю эту ошибку со частью слушателя: метод setOnRatingBarChangeListener (RatingBar.OnRatingBarChangeListener) в типе RatingBar не применим для аргументов (новый OnRatingBarChangeListener() {}) – Mike