首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Android Studio的一个类中声明多个变量

在Android Studio的一个类中声明多个变量
EN

Stack Overflow用户
提问于 2018-10-20 07:17:00
回答 2查看 425关注 0票数 -1

我有一个任务是在Android Studio中构建一个简单的多窗口小部件应用程序,我正在尝试弄清楚如何在一个多页照片评级应用程序的一个类中声明多个变量。我有4页和4张照片,每个照片下面都有一个RatingBar。我想有所有评分的平均值显示在页面的顶部。为简单起见,我使用SetTitle将其转换为页面标题

我如何编写这个java,以便我可以访问我的所有4个评分并将基本数学应用于它们?从技术上讲,这超出了我们到目前为止在这门课上学到的内容。

代码语言:javascript
复制
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));
            }
        });
    }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-10-20 08:08:31

您可能应该将它们作为R.id.ratingBars[0]等等,但是既然您没有这样做,假设它是通过R.id.ratingBar4实现的R.id.ratingBar1,那么您可以这样做:

代码语言:javascript
复制
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变得更容易。您只需将它们添加到顶部的原始数组初始化列表中,一切都会得到处理。

票数 1
EN

Stack Overflow用户

发布于 2018-10-20 08:04:53

你可以试着打电话给他们

代码语言:javascript
复制
Main2Activity.ratingBar2.getRating()

但它们应该是公开的,这并不太好。

在其他地方,您可以将它们声明为private,并使用create public getter方法从外部类中检索它们。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52901007

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档