我有一个任务是在Android Studio中构建一个简单的多窗口小部件应用程序,我正在尝试弄清楚如何在一个多页照片评级应用程序的一个类中声明多个变量。我有4页和4张照片,每个照片下面都有一个RatingBar
。我想有所有评分的平均值显示在页面的顶部。为简单起见,我使用SetTitle
将其转换为页面标题
我如何编写这个java,以便我可以访问我的所有4个评分并将基本数学应用于它们?从技术上讲,这超出了我们到目前为止在这门课上学到的内容。
package ca.bcit.comp2052.a00587366.multiplewidgetsapp;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.RatingBar;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Start of rating bar
RatingBar ratingBar1 = (RatingBar) findViewById(R.id.ratingBar1);
ratingBar1.setOnRatingBarChangeListener(new RatingBar.OnRatingBarChangeListener() {
@Override
public void onRatingChanged(RatingBar ratingBar1, float rating, boolean fromUser) {
// Implement your logic here
float total = 0;
total += ratingBar1.getRating();
// total += ratingBar2.getRating();
// total += ratingBar3.getRating();
// total += ratingBar4.getRating();
float average = total / 4;
setTitle("Average: " + average);
}
});
// end of rating bar
Button buttonNext = (Button) findViewById(R.id.nextButton);
buttonNext.setOnClickListener(new
android.view.View.OnClickListener() {
public void onClick(View v) {
startActivity(new Intent(MainActivity.this,
Main2Activity.class));
}
});
}
}
发布于 2018-10-20 08:08:31
您可能应该将它们作为R.id.ratingBars[0]
等等,但是既然您没有这样做,假设它是通过R.id.ratingBar4
实现的R.id.ratingBar1
,那么您可以这样做:
final RatingBar[] ratingBars = {
(RatingBar) findViewById(R.id.ratingBar1),
(RatingBar) findViewById(R.id.ratingBar2),
(RatingBar) findViewById(R.id.ratingBar3),
(RatingBar) findViewById(R.id.ratingBar4)
};
for (final RatingBar ratingBar : ratingBars) {
ratingBar.setOnRatingBarChangeListener(new RatingBar.OnRatingBarChangeListener() {
@Override
public void onRatingChanged(RatingBar bar, float rating, boolean fromUser) {
// Implement your logic here
float total = 0.0f;
for (final RatingBar ratingBar : ratingBars) {
total += ratingBar.getRating();
}
float average = total / 4.0f;
setTitle("Average: " + average);
}
});
}
这也使得在必要时添加新的RatingBar
变得更容易。您只需将它们添加到顶部的原始数组初始化列表中,一切都会得到处理。
发布于 2018-10-20 08:04:53
你可以试着打电话给他们
Main2Activity.ratingBar2.getRating()
但它们应该是公开的,这并不太好。
在其他地方,您可以将它们声明为private,并使用create public getter方法从外部类中检索它们。
https://stackoverflow.com/questions/52901007
复制相似问题