データベースをチェックして、ユーザーが特定のアイテムを持っているかどうかをチェックする非同期タスクがあります。アイテムがある場合は評価バーを膨らませ、そうでない場合はボタンを膨らませてアイテムを追加できるようにします。
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 により、Eclipse で次のエラーが発生します。
The method findViewById(int) is undefined for the type CheckBeerJSON
これは、アクティビティを拡張しないためだと思われるため、これを正確に実装する方法について混乱しています。
膨張したレートバー 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>